php输出时间变量出错,Php DateTime实例使用时间戳返回错误的结果

我一直使用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) . "
";

# 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(尽管我的应用时区设置为太平洋/奥克兰).

// 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";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值