strtotime() 在格式化日期上抛出 false

发布于 2024-11-03 00:32:42 字数 1409 浏览 5 评论 0原文

我在将格式化日期字符串转换为整数时间戳时遇到问题。我使用日期选择器输入诸如 DD/MM/YY 之类的字段,并使用 strtotime 来更改它。

示例用法

$date_from = (!empty($_POST['datefrom'])) ? (string) $db->sql_escape($_POST['datefrom']) : false;
$date_to   = (!empty($_POST['dateto'])) ? (string) $db->sql_escape($_POST['dateto']) : false;

$time_from = (!empty($_POST['timefrom'])) ? (string) $db->sql_escape($_POST['timefrom']) : '';
$time_to   = (!empty($_POST['timeto'])) ? (string) $db->sql_escape($_POST['timeto']) : '';

转储

var_dump($_POST); 
var_dump($date_from . ' ' . $time_from);
var_dump($date_to . ' ' . $time_to);

输出

array(4) {
  ["datefrom"]=>
  string(10) "23/03/2011"
  ["dateto"]=>
  string(10) "18/04/2011"
  ["timefrom"]=>
  string(5) "01:26"
  ["timeto"]=>
  string(5) "04:44"
}
string(16) "23/03/2011 01:26"
string(16) "18/04/2011 04:44"

现在您可以看到每个变量都不为空,现在没有任何返回(除了 false)当使用 strtotime 时:

$range_from = strtotime($date_from . ' ' . $time_from);
$range_to   = strtotime($date_to . ' ' . $time_to);

var_dump($range_from);
var_dump($range_to);

输出

bool(false)
bool(false)

现在这就是我一直在思考为什么它不将 DD/MM/YY HH:MM 转换为时间戳,我几乎找不到它出了什么问题......

I'm having a problem with converting a formatted date string into a integer timestamp. I'm using a datepicker to input a field such as DD/MM/YY and I'm using strtotime to change it.

Example usage

$date_from = (!empty($_POST['datefrom'])) ? (string) $db->sql_escape($_POST['datefrom']) : false;
$date_to   = (!empty($_POST['dateto'])) ? (string) $db->sql_escape($_POST['dateto']) : false;

$time_from = (!empty($_POST['timefrom'])) ? (string) $db->sql_escape($_POST['timefrom']) : '';
$time_to   = (!empty($_POST['timeto'])) ? (string) $db->sql_escape($_POST['timeto']) : '';

Dumps

var_dump($_POST); 
var_dump($date_from . ' ' . $time_from);
var_dump($date_to . ' ' . $time_to);

Outputs

array(4) {
  ["datefrom"]=>
  string(10) "23/03/2011"
  ["dateto"]=>
  string(10) "18/04/2011"
  ["timefrom"]=>
  string(5) "01:26"
  ["timeto"]=>
  string(5) "04:44"
}
string(16) "23/03/2011 01:26"
string(16) "18/04/2011 04:44"

Now you can see each variable are not empty, now nothing is returning (except false) when using strtotime with this:

$range_from = strtotime($date_from . ' ' . $time_from);
$range_to   = strtotime($date_to . ' ' . $time_to);

var_dump($range_from);
var_dump($range_to);

Outputs

bool(false)
bool(false)

Now that's where I'm stuck thinking why it's not converting a DD/MM/YY HH:MM into a timestamp, I hardly can find what's wrong with it...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

执妄 2024-11-10 00:32:42

请参阅 http://php.net/strtotime

日期采用 m/d/y 或 dmy 格式
通过查看来消除歧义
各个之间的分隔符
组件:如果分隔符是
斜杠 (/),则美式 m/d/y 为
假定;而如果分隔符是
破折号 (-) 或点 (.),然后
假定为欧洲 dmy 格式。

m/d/y 中的 23/03/2011 无效,因此该函数返回 false。

See http://php.net/strtotime

Dates in the m/d/y or d-m-y formats
are disambiguated by looking at the
separator between the various
components: if the separator is a
slash (/), then the American m/d/y is
assumed; whereas if the separator is a
dash (-) or a dot (.), then the
European d-m-y format is assumed.

23/03/2011 in m/d/y is invalid, as such the function returns false.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文