将带有时区的日期字符串转换为时间戳

Convert date string with timezone to timestamp

提问人:Tom Esterez 提问时间:1/13/2015 更新时间:1/13/2015 访问量:1717

问:

我收到以下格式的日期,需要将其转换为时间戳。 不幸的是,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

解决这个问题的正确方法是什么?

PHP 日期 时区

评论

0赞 sanjeed 1/13/2015
如果它与 Java 有关,希望这可能<有所帮助 stackoverflow.com/questions/2891361/......>
0赞 Dave 1/13/2015
你也许可以做这样的事情$date = new DateTime('2015-01-09T20:46:00+0100'); echo $date->format('Y-m-d H:i:s');

答:

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.6ideone.comeval.in3v4l.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

演示:https://eval.in/241781

感谢您的帮助!