2011-12-22 55 views
18

DateTime類肯定有一些方便的方法,看起來總體上優於本機php日期函數,如strtotime,mktimestrftime(以及更多)。但是,我有什麼缺點或原因,我不應該使用它?DateTime類與原生PHP日期函數

我能想到的唯一原因是創建一個類的整個實例可能比使用一個函數更昂貴。

  • 你同意嗎?
  • 對我們來說簡單的東西的日期時間對象是否有意義?
  • 是否還有其他缺點?

在這兩個選項之間轉換似乎有點混亂,所以我想清除一下我應該喜歡做的事情。

兩個對我的決定的例子是:

  • 將日期的本地化值
  • 計算兩個日期

回答

36

之間的時間。如果你擔心的是,創建一個類實例昂貴的,它會阻礙性能,那麼我恐怕你在錯誤的樹上吠叫。一個人不應該考慮是否使用經過驗證的面向對象的方法。如果爲了執行某些日期計算而使用DateTime類是有意義的,那就使用它。在您的應用程序感受到它的位置上並不昂貴,除非您做了一些瘋狂的事情,例如創建100萬個DateTime對象。

DateTime很棒的原因是因爲它通過在創建對象時指定時區來減輕夏令時的擔憂。獲取日期之間的差異或獲取不同對象之間的間隔也很容易。它基本上減少了所需的擔心和編碼的數量(但我承認這有時是錯誤的,希望它能在5.4版PHP中得到解決)。

底線 - 我會一直使用它。

+5

加上日期範圍,即使是在32位PHP環境,就足以讓一個古生物學家或宇宙學家研究宇宙快樂 – 2011-12-22 15:04:26

+0

我看到了日期時間的「handyness」的開頭或結尾,但將還使用它適用於我剛添加到我的問題中的那些簡單的東西? – Anonymous 2011-12-22 15:07:06

+4

我會的,因爲我們採用'mktime'或'strtotime'函數 - 它們需要一定的參數順序來表示日期,年份,月份,小時等。使用'DateTime',我可以使用任意參數創建對象,例如'$ date = DateTime :: createFromFormat('m H:s D-Y',$ weird_user_input);'然後可以格式化爲unix時間戳或我希望的任何其他日期格式。我甚至可以在創建對象時立即指定時區。所以是的,我肯定會使用它,因爲我並不真正看到程序的方式能夠幫助我更好。 – 2011-12-22 15:11:34