PHP如何在2038年之后本地化日期

时间:2014-10-28 10:05:04

标签: php date datetime localization year2038

我尝试在2038年之后使用php

来使用本地化日期

strftime使用时间戳,所以它在2038年之后不起作用

DateTime未本地化...

所以我尝试将IntlDateFormatter与DateTime一起使用:

$d = DateTime::createFromFormat('Y-m-d', '2040-01-01');
$fmt = new IntlDateFormatter(
    'fr_FR',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'America/Los_Angeles',
    IntlDateFormatter::GREGORIAN
);
echo $fmt->format($d);    
echo $fmt->getErrorMessage();

这是我得到的: datefmt_format:无法获取时间戳:U_ILLEGAL_ARGUMENT_ERROR

实际上我猜IntlDateFormatter会在内部将日期转换为时间戳......

那么我怎么能在php中将本地化的日期超过2038?

1 个答案:

答案 0 :(得分:2)

我们在这里遇到同样的问题。 此问题出现在32位计算机中,因为格式化程序将DateTime值更改为整数时间戳以处理它。在纪元(1970)+ - maxint之外的日期会给你一个错误。 有两种方法可以解决这个问题: 1 - 使用64位服务器。 2 - 修复PHP IntlDateFormatter

我们要在这里1-,祝你好运!

(时间戳的有效范围通常为格林威治标准时间1901年12月13日20:45:54 GMT至2038年1月19日星期二03:14:07 GMT。(这些是与最小值和最大值对应的日期但是,在PHP 5.1.0之前,在某些系统(例如Windows)上,此范围限制在01-01-1970到19-01-2038之间.Cf:http://php.net/manual/en/function.date.php