php 32bit日期解析13Dec 1901之前的日期

时间:2011-04-11 15:29:28

标签: php datetime 32-bit

我很高兴在我的开发机器上使用strtotime()来解析其中一些在19世纪的日期,在16世纪是一个极端的例子。

但我的开发机器是64位,服务器是32位。在星期五,1901年12月13日20:45:54 UTC之前的任何日期的32位机器超出范围(参见strtotime的注释)。

我很乐意为此编写一些自定义代码,但我想我会问是否有任何内置函数可以管理它。日期为ISO 8601格式。

对于它的价值,服务器是使用php 5.2.10的centos 5.4

1 个答案:

答案 0 :(得分:3)

  

1901-12-12T05:00:00Z例如

我现在无法测试,但DateTime's constructor 可能能够接受您的格式而无需createFromFormat。我无法从文档中说出来。

尝试

try {
    $date = new DateTime('1901-12-12T05:00:00Z');
} catch (Exception $e) {
    echo "Arggh! ".$e->getMessage();
    die();
}

echo $date->format('Y-m-d H:i:s');

看看会发生什么,特别注意它是否正确理解Z(即使其成为UTC时间)。

DateTime在任何系统上内部使用64位数字,并且没有范围限制。

如上所述,从5.3开始,您将能够使用createFromFormat来解析由date()个占位符之一表示的任何日期。这是最佳方式,因为您强制它解析特定模式,而不是猜测它。