2012-07-23 112 views
0

我想要使用此功能在格式1899-12-30 19:00:00.000給出的字符串轉換爲日期:PHP - 轉換字符串到日期

$startDate = strtotime("1899-12-30 19:00:00.000"); 

但作爲一個結果,我得到一個錯誤的日期,例如

30.10.2008 00:00:00 

我做錯了什麼?

+0

什麼是$數組?應該['i''是'[$ i]'? – andrewsi 2012-07-23 13:30:25

+0

更新了我的問題:-) – Oleg 2012-07-23 13:34:15

+2

這是偶然的,可以處理這些古代功能的範圍之外。爲什麼1899? – Esailija 2012-07-23 13:34:19

回答

4

使用DateTime

$date = DateTime::createFromFormat('Y-m-d H:i:s.u', '1899-12-30 19:00:00.000', new DateTimeZone('America/New_York')); 
echo $date->getTimestamp() . ' ' . $date->format('Y-m-d H:i:s'); 

注意,這將是一個負值,因爲它1月1日,1970年上面的代碼outputs之前是:

-2209093200 1899-12-30 19:00:00 

請務必設置正確的時區構造函數爲DateTimeZone(或者您可以忽略它作爲默認值)。

3

如果正在使用PHP 5> = 5.3.0可以使用date_parse_from_formatDocs函數是這樣的:

$date = "1899-12-30 19:00:00.000"; 
$dateObj = date_parse_from_format("Y-m-d H:i:s.000",$date); 

來源:php.net

+0

我不相信你的格式字符串是正確的 - 它[不會返回正確的結果](http://viper-7.com/xYsS2L)在我的測試中。 – nickb 2012-07-23 13:45:39

+0

是的謝謝。我糾正了它。 – 2012-07-23 13:49:35

1

日期1899-12-30 19:00:00.000由UNIX時間戳-2209096800,這是表示就在32位有符號整數的範圍之外。在一個64位的PHP系統上它可以工作,在32位系統上你會遇到問題。

使用DateTime類來表示這樣的日期,它可以處理它。