提问人:Tom Esterez 提问时间:1/13/2015 更新时间:1/13/2015 访问量:1717
将带有时区的日期字符串转换为时间戳
Convert date string with timezone to timestamp
问:
我收到以下格式的日期,需要将其转换为时间戳。
不幸的是,strtotime 函数忽略了时区组件:2015-01-09T20:46:00+0100
print strtotime('2015-01-09T20:46:00+0100') . "\n";
print strtotime('2015-01-09T20:46:00');
//result is the same with or without timezone:
//1420832760
//1420832760
解决这个问题的正确方法是什么?
答:
3赞
John Conde
1/13/2015
#1
DateTime 正确处理此问题:
$date = new DateTime('2015-01-09T20:46:00+0100');
echo $date->getTimestamp();
echo "\n";
$date = new DateTime('2015-01-09T20:46:00');
echo $date->getTimestamp();
1420832760
1420836360
评论
0赞
Rizier123
1/13/2015
哈哈,为什么这在我的本地主机上不起作用?我首先虽然也有效,但在我的 XAMPP localhost 服务器上它不起作用,您有什么想法吗?DateTime
0赞
John Conde
1/13/2015
老实说,我没有。最好的猜测是php版本错误。您运行的是哪个版本的 PHP?
0赞
Rizier123
1/13/2015
我的PHP版本是: ,我试了一下,它起作用了,现在我累了:它没有用 看这里:3v4l.org/cYnDG ,这似乎真的很奇怪5.5.6
ideone.com
eval.in
3v4l.org
0赞
Rizier123
1/13/2015
我认为这不应该起作用!因为请查看手册->参数->笔记并阅读注释!php.net/manual/en/datetime.construct.php
0赞
Tom Esterez
1/13/2015
我也是一样。DateTime 方法和 strtotime 都适用于 eval.in 但不适用于我的本地 WAMP (php 5.5.8)
0赞
Tom Esterez
1/13/2015
#2
我弄清楚了!
使用默认时区,除非其中指定了时区 参数 http://php.net/manual/en/function.strtotime.php
这就是为什么结果是相同的设置或不是时区的原因:
date_default_timezone_set('Europe/Paris');
print strtotime('2015-01-09T20:46:00+0200');
print "\n";
print strtotime('2015-01-09T20:46:00+0100');
print "\n";
print strtotime('2015-01-09T20:46:00');
print "\n\n";
date_default_timezone_set('UTC');
print strtotime('2015-01-09T20:46:00+0100');
print "\n";
print strtotime('2015-01-09T20:46:00');
输出:
1420829160
1420832760
1420832760
1420832760
1420836360
感谢您的帮助!
评论
$date = new DateTime('2015-01-09T20:46:00+0100'); echo $date->format('Y-m-d H:i:s');