【发布时间】:2012-01-24 13:40:49
【问题描述】:
当尝试使用DateTime::createFromFormat 解析日期时,PHP 将无法识别时区。
例子:
$t = new \DateTime();
echo $t->format('Y-m-dTH:i:s');
会输出
2012-01-24MSK16:53:52
现在,当我尝试从相同格式解析该字符串时
var_dump(\DateTime::createFromFormat('Y-m-dTH:i:s', '2012-01-24MSK16:53:52'));
我明白了
bool(false)
当我不将时区放入字符串时,它可以工作
$t = new \DateTime();
echo $t->format('Y-m-dH:i:s');
会给
2012-01-2417:17:24
并解析
var_dump(\DateTime::createFromFormat('Y-m-dH:i:s', "2012-01-2417:17:24"));
会给
object(DateTime)#3 (3) {
["date"]=>
string(19) "2012-01-24 17:17:24"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Moscow"
}
经过测试
- 带有 Suhosin-Patch (cli) 的 PHP 5.3.6-13ubuntu3.3(构建时间:2011 年 12 月 13 日 18:18:37)和
- PHP 5.3.9 (cli)(构建时间:2012 年 1 月 18 日 20:02:33)
只要我们注意时区,就会出现问题。这是一个错误吗?还是我做错了什么?提前谢谢!
【问题讨论】:
-
我应该看到:php > $t = new \DateTime(); echo $t->format('Y-m-dH:i:s'); 2012-01-2417:17:24 php > var_dump(\DateTime::createFromFormat('Y-m-dH:i:s', "2012-01-2417:17:24")); object(DateTime)#3 (3) { ["date"]=> string(19) "2012-01-24 17:17:24" ["timezone_type"]=> int(3) ["timezone"]= > string(13) "欧洲/莫斯科" }
-
我知道答案,但是:哎呀!无法提交您的答案,因为:声誉低于 100 的用户在提问后 8 小时内无法回答自己的问题。您可以在 7 小时内自行回答。在此之前,请使用 cmets,或编辑您的问题。
-
戈登,非常感谢您的编辑!!!刚刚在推特上关注了你 =)
-
Y-m-dTH:i:s到底是什么格式;你是不是想要Y-m-d\TH:i:s?
标签: php datetime timezone format