2010-07-16 21 views
4

strtotime("25/03/1957")返回false。什麼能滿足所有這些日期格式?我無法想象要花多長時間才能製作出我自己的作品,所以我希望已經有一個你知道的。PHP:解析任何格式的日期(特別是:2008-10-20,2008/10/20,2008.10.20,2008年11月20日)

謝謝!

+0

好問題:'strtotime'對於非美國格式並不是很好。 – 2010-07-16 19:33:40

+2

在發佈這篇文章之後的字面意思是一秒鐘,我遇到了這個問題:http://pics.kuvaton.com/kuvei/month_day_year_america_failure.jpg :) – 2010-07-16 19:34:28

回答

1

我發現,datetime對象支持更廣泛格式比strtotime()函數,並且您的服務器的時區設置也有所不同;但是我最終創建了一個函數,在使用字符串到日期方法之前用' - '替換'/'。我也測試了有效,然後在再次測試之前嘗試交換明顯的dd和mm(25-03-2001 => 03-25-2001),如果無效的話。

2

考慮到一些日期是有效的,但可以指向兩個不同的實際日期,無功能將永遠能夠「猜測」在任何時候都正確的格式...

要幫助的是,隨着PHP> = 5.3,新的功能已經被添加:date_create_from_format - 但它不與PHP < 5.3,遺憾的是存在...
(參見DateTime::createFromFormat


儘管如此,你拿了例如, 1957年是問題的可能來源:PHP gen與UNIX Timestamps erally的作品,當它涉及到日期...

而且,至少在32位系統,那些只能代表1970年和2038年之間日期 - 因爲他們算的秒數,因爲1970- 01-01。

爲了避免這個問題,它往往是一個好主意,使用DateTime類,與quoting

的日期和時間信息 內部存儲爲一個64位數字 因此支持所有可以想象的日期(包括 負數年份)。 範圍從過去約292億年 到未來相同。

(它不會解決PHP < 5.3解析問題,但它會解決的日期範圍的問題...)

相關問題