Mau*_*ira 8 php datetime utc year2038 tzdata
我需要在Centos 7.4 64位上使用php(5.4)将日期时间信息从本地时间(gtm + 1)转换为UTC
我尝试了以下程序:
function convertToUtc ($date)
{
$dateTime = new DateTime ($date, new DateTimeZone('Europe/Rome'));
$dateTime->setTimezone(new DateTimeZone('UTC'));
return $dateTime->format('Y-m-d') . 'T' . $dateTime->format('H:i:s') . 'Z';
}
Run Code Online (Sandbox Code Playgroud)
这工作到2038年之后,它错误地计算DST总是返回1小时的偏移量:
2037:一切都好
LOCAL TIME -> UTC TIME
2037-03-28 10:12:13 -> 2037-03-28T09:12:13Z the day before dst change
2037-03-29 10:12:13 -> 2037-03-29T08:12:13Z the first DST day
2037-10-24 10:12:13 -> 2037-10-24T08:12:13Z the last DST day
2037-10-25 10:12:13 -> 2037-10-25T09:12:13Z the day after
2038 : ok until dst change
2038-03-27 10:12:13 -> 2038-03-27T09:12:13Z OK
2038-03-28 10:12:13 -> 2038-03-28T09:12:13Z error : should be 2038-03-28 08:12:13Z
2038-10-30 10:12:13 -> 2038-10-30T09:12:13Z error : should be 2038-10-30 08:12:13Z
2038-10-31 10:12:13 -> 2038-10-31T09:12:13Z OK
Run Code Online (Sandbox Code Playgroud)
请注意:日期算术似乎不受unix时间戳限制(19/1/2018)的影响,因为以下表达式正常工作:
$date = new DateTime();
$date->modify('+100 year');
echo $date->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)
(打印2118-04-23)
有什么建议 ?关心maurizio
这不是一个错误。没有人能够预测未来。如果欧盟在 2021 年废除夏令时,那么您从 2022 年到 2037 年的数值就是错误的。PHP 转换列表包含时区的所有偏移量更改。我看到的最后一个条目是“2037-10-25T01:00:00 + 0000”。
<?php
$tzRome = new DateTimeZone('Europe/Rome');
$transitionsList = $tzRome->getTransitions();
echo "<pre>";
var_dump($transitionsList);
echo "</pre>";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |