3

我尝试使用 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 的日期?

4

1 回答 1

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。(这些日期对应于 32 的最小值和最大值) -bit 有符号整数)。然而,在 PHP 5.1.0 之前,这个范围在某些系统(例如 Windows)上被限制在 01-01-1970 到 19-01-2038。参见:http: //php.net/manual/en /function.date.php )

于 2014-10-28T12:08:25.767 回答