5

我有变量$EDate,我使用了带有不同值的变量的 strtotime 函数,结果如下:

$EDate = 10-21-2013;    echo "strtotime($EDate)";   the result = nothing    and the type is boolean
$EDate = 09-02-2013;    echo "strtotime($EDate)";   the result = 1360386000 and the type is integer
$EDate = 09-30-2013;    echo "strtotime($EDate)";   the result = nothing    and the type is boolean
$EDate = 09-30-2013;    echo "strtotime($EDate)";   the result = nothing    and the type is boolean
$EDate = 07-02-2014;    echo "strtotime($EDate)";   the result = 1391749200 and the type is integer
$EDate = 10-12-2014;    echo "strtotime($EDate)";   the result = 1418187600 and the type is integer

任何人都可以解释这一点以及如何避免布尔结果吗?

4

2 回答 2

4

文档中:

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

您的代码假定日期为d-m-y格式,并且FALSE由于月份值不正确而返回:

var_dump(strtotime('10-21-2013')); // no month 21
var_dump(strtotime('09-30-2013'));
var_dump(strtotime('09-30-2013'));

如果您希望能够使用自定义格式,请DateTime::createFromFormat()改用:

$date = DateTime::createFromFormat('m-d-Y', '10-21-2013');
echo $date->format('U');

演示!

于 2013-10-03T17:03:40.750 回答
3

编辑:此答案不再适用于该问题,请参阅下面的评论。

将您的值放在引号中,使它们成为一个字符串:

$EDate = '10-21-2013'; 
...

您当前的代码进行数学减法:10 - 12 - 2013 = -2015。

于 2013-10-03T16:58:01.423 回答