strtotime returning false



我有这样的日期字符串:

"2012 28 Nov 21:00 CET"

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

有没有办法将这个字符串转换为日期对象,或者我需要以不同的格式设置它?

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需要"英语文本日期时间"(根据手册),而Y-D-M不是。任何时候strtotime返回false,它都不会理解您的字符串,而在这个应用程序中,这是意料之中的事。手册页面上的注释处理了这个问题:

注意:

m/d/y或d-m-y格式的日期通过查看各种组件之间的分隔符:如果分隔符是斜线(/),则假定为美国m/d/y;而如果分隔符是短划线(-)或点(.),然后是欧洲d-m-y格式假设。

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

同样,DateTime是与日期或时间进行任何交互的绝佳工具。

文档

  • DateTime类-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

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

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

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

将输出1354132800

要创建phpDateTime对象,可以执行以下操作:

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