我的日期字符串看起来像这样:
"2012 28 Nov 21:00 CET"
strtotime("2012 28 Nov 21:00 CET")
返回false。
有没有办法将此字符串转换为日期对象,还是需要以不同方式对其进行格式化?
答案 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
是与日期或时间进行任何互动的优秀工具。
<强>文档强>
DateTime
class- http://www.php.net/manual/en/class.datetime.php DateTime::createFromFormat
- http://www.php.net/manual/en/datetime.createfromformat.php strtotime
- http://php.net/manual/en/function.strtotime.php date
(还列出日期格式字符串) - http://php.net/manual/en/function.date.php 答案 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');