2011-04-11 15 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