我有看起来像这样的日期字符串:
"2012 28 Nov 21:00 CET"
strtotime("2012 28 Nov 21:00 CET")
返回假。
有什么方法可以将此字符串转换为日期对象,还是我需要以不同的方式对其进行格式化?
我有看起来像这样的日期字符串:
"2012 28 Nov 21:00 CET"
strtotime("2012 28 Nov 21:00 CET")
返回假。
有什么方法可以将此字符串转换为日期对象,还是我需要以不同的方式对其进行格式化?
2012 28 Nov 21:00 CET
是奇怪的日期/时间格式。YDM? 你从哪里得到的?
无论如何,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
需要一个“英文文本日期时间” (根据手册),而 YDM 不是。任何时候都strtotime
返回 false,它根本不理解您的字符串,这在此应用程序中是预期的。手册页上的注释处理了这个问题:
笔记:
m/d/y 或 dmy 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠 (/),则假定为美式 m/d/y;而如果分隔符是破折号 (-) 或点 (.),则假定为欧洲 dmy 格式。
为避免潜在的歧义,最好尽可能使用 ISO 8601 (YYYY-MM-DD) 日期或 DateTime::createFromFormat()。
同样,DateTime
它是与日期或时间进行任何交互的出色工具。
文档
DateTime
类- http://www.php.net/manual/en/class.datetime.phpDateTime::createFromFormat
- http://www.php.net/manual/en/datetime.createfromformat.phpstrtotime
- http://php.net/manual/en/function.strtotime.phpdate
(也列出日期格式字符串) - http://php.net/manual/en/function.date.phpstrtotime不会创建日期对象,它只是尝试解析您的输入并返回一个 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');