2011-04-11 61 views
3

我很高兴地在我的开发机器上使用strtotime()解析日期其中一些在19世纪,在极端的例子在十六世纪。php 32位日期解析的日期之前13Dec 1901

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

我很高兴为此编写一些自定义代码,但是我想我会问是否有任何php内置函数可以管理这个。日期采用ISO 8601格式。

对于什么是值得的服务器PHP是CentOS的5.4 5.2.10

+1

Aww ...如果是PHP 5.3,你可以使用'DateTime :: createFromFormat',我认为这是解决这个问题的最佳解决方案。你的日期格式是什么?例如, – 2011-04-11 15:32:24

+0

1901-12-12T05:00:00Z。 – 2011-04-11 15:35:10

+0

同意@Pekka ....任何机会,你可以升级你的PHP? 5.2不再支持,所以你真的应该移到5.3。 – Spudley 2011-04-11 15:35:57

回答

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()的占位符之一表示的任何日期。这是最佳的方式,因为你迫使它解析一个特定的模式,而不是猜测它。

+0

谢谢我有本地工作的代码。如果一旦部署,它会发出绿色的巨大滴答声。 – 2011-04-11 16:33:52