首页 / PHP / PHP-错误的时间戳/时区转换
PHP-错误的时间戳/时区转换
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP-错误的时间戳/时区转换,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1653字,纯文字阅读大概需要3分钟。
内容图文
![PHP-错误的时间戳/时区转换](/upload/InfoBanner/zyjiaocheng/665/70eead3f1cf5418faaeb803d3dddbef0.jpg)
我从MySQL数据库中获取了一个DateTime,并使用Twig将其转换为Unix TimeStamp:
在DB中:2016-06-22 00:00:00
在Twig中作为时间戳记:dbEntry.start | date(‘U’)==> 1466546400
在Twig中作为日期dbEntry.start | date(‘Y-m-d H:i)==> 2016-06-22 00:00
在此处再次检查该时间戳记http://www.gaijin.at/olsutc.php表示该时间戳记是本地时间.
我通过AjaxCall将此时间戳发送到我的后端,发生这种情况:
$dateDB = \DateTime::createFromFormat('U',$date)->format('Y-m-d H:i');
dump($dateDB);
($date为1466546400)
输出量
2016-06-21 22:00
在我所有的php.ini文件中,我都将时区设置为Europe / Berlin,但是产生的时间戳显然是UTC.甚至可以手动设置时区
$dateDB = \DateTime::createFromFormat('U',$date,new \DateTimeZone('Europe/Berlin'))->format('Y-m-d H:i');
dump($dateDB);
也会导致2016-06-21 22:00.
这是怎么发生的,除了php.ini文件之外,我可以从哪里开始寻找它?
边注
我看到这里也是PHP timestamps & timezone configuration的地址,我可以手动添加7200秒,但是由于DailightSavingTime在冬季仍然正确吗?
解决方法:
问题出在以下事实:createFromFormat()在设计上忽略了它的第三个参数(时区):
Note: The timezone parameter and the current timezone are ignored
when the time parameter either contains a UNIX timestamp (e.g.
946684800) or specifies a timezone (e.g. 2010-01-28T15:00:00+02:00).
这是一个更干净的测试用例:
$dt = new DateTime('2016-06-22 00:00:00', new DateTimeZone('Europe/Berlin'));
$dt2 = DateTime::createFromFormat('U', $dt->getTimestamp(), new \DateTimeZone('Europe/Berlin'));
var_dump($dt->format('c'), $dt2->format('c'));
string(25) "2016-06-22T00:00:00+02:00"
string(25) "2016-06-21T22:00:00+00:00"
在这里,您需要随后更改时区(仅当不存在时区信息时才使用默认时区):
$dt2->setTimeZone(new DateTimeZone('Europe/Berlin'));
内容总结
以上是互联网集市为您收集整理的PHP-错误的时间戳/时区转换全部内容,希望文章能够帮你解决PHP-错误的时间戳/时区转换所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。