strtotime返回false

时间:2012-11-28 21:12:23

标签: php

我的日期字符串看起来像这样:

"2012 28 Nov 21:00 CET"

strtotime("2012 28 Nov 21:00 CET")返回false。

有没有办法将此字符串转换为日期对象,还是需要以不同方式对其进行格式化?

2 个答案:

答案 0 :(得分:18)

2012 28 Nov 21:00 CET是一种奇怪的日期/时间格式。 Y型d-M?你在哪里得到的?

无论如何,DateTime对象有一个方法createFromFormat,可以更好地解析它:

$dt = DateTime::createFromFormat("Y d M H:i T", '2012 28 Nov 21:00 CET');
$ts = $dt->getTimestamp();
echo $ts; // 1354132800 

在此处试试:http://codepad.viper-7.com/NfAmcw

strtotime需要“英文文本日期时间”(according to the manual),而Y-D-M则不是。任何时候strtotime返回false,它根本不理解你的字符串,在这个应用程序中是预期的。手册页上的注释处理此问题:

  

注意:

     

通过查看,可以消除m / d / y或d-m-y格式的日期   各个组件之间的分隔符:如果分隔符是a   斜线(/),然后是美国m / d / y;而如果   separator是短划线( - )或点(。),然后是欧洲d-m-y格式   假定。

     

为避免潜在的歧义,最好使用ISO 8601(YYYY-MM-DD)   date或DateTime :: createFromFormat()尽可能。

同样如此,DateTime是与日期或时间进行任何互动的优秀工具。

<强>文档

答案 1 :(得分:2)

strtotime不会创建日期对象,它只是尝试解析您的输入并返回一个unix时间戳。

您可以在此处找到有效的格式:http://www.php.net/manual/en/datetime.formats.php

echo strtotime("2012-11-28T21:00:00+01:00");

会输出1354132800

创建一个php DateTime对象,你可以这样做:

$date = new DateTime('2012-11-28T21:00:00+01:00');
echo $date->format('Y-m-d H:i:s');