Php DateTime实例使用时间戳返回错误的结果
发布时间:2020-12-13 16:50:31 所属栏目:PHP教程 来源:网络整理
导读:我一直使用php DateTime,我刚刚在一个使用date()的旧应用程序上做了一些工作.我注意到我的DateTime时间与date()次数不匹配.这让我非常担心. 我最终在本地做了一些测试,发现当使用unix时间戳实例化时,DateTime在我的本地机器上给出的结果不正确(格式为“@ 136
我一直使用php DateTime,我刚刚在一个使用date()的旧应用程序上做了一些工作.我注意到我的DateTime时间与date()次数不匹配.这让我非常担心.
我最终在本地做了一些测试,发现当使用unix时间戳实例化时,DateTime在我的本地机器上给出的结果不正确(格式为“@ 1365389490”).他们落后12小时(或更多取决于夏令时). 请注意我已经使用php 5.2.17,5.3.14和5.4.4在我的MAMP Pro安装中测试了这些(是的,我在每次尝试之前重新启动了apache).我还在php 5.3.6上的开发服务器上进行了测试.所有这些都输出了错误的值. # To confirm date() uses the right timezone date_default_timezone_set("Pacific/Auckland"); $ts = '1365389490'; # 02:51:30pm 08/04/2013 # This shows correctly (02:51:30pm 08/04/2013) echo date("h:i:sa d/m/Y",$ts) . "<br /><br />"; # This shows incorrectly (02:51:30am 08/04/2013) $dateTime = new DateTime("@".$ts,new DateTimeZone("Pacific/Auckland")); echo $dateTime->format("h:i:sa d/m/Y"); 奇怪的是,这种替代方式有效.这是旧的PHP 5.2及更早版本的方法. $dateTime = new DateTime(); $dateTime->setTimestamp($ts); echo $dateTime->format("h:i:sa d/m/Y"); 这是基本的东西.我不知道为什么它不表现自己.任何帮助将非常感激. 解决 根据php文档,当您将时区传递给DateTime构造函数时,会忽略时区.对我来说,时间是UTC(尽管我的应用时区设置为太平洋/奥克兰). 来自文档:http://php.net/manual/en/datetime.construct.php // Using a UNIX timestamp. Notice the result is in the UTC time zone. $date = new DateTime('@946684800'); echo $date->format('Y-m-d H:i:sP') . "n"; 解决方法
使用@实例化DateTime不使用时区,因此您必须在之后设置时区:
$dateTime = new DateTime("@".$ts); $dateTime->setTimezone(new DateTimeZone("Pacific/Auckland")); echo $dateTime->format("h:i:sa d/m/Y"); // 02:51:30pm 08/04/2013 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |