PHP自帶的DateTime類,Carbon擴展類,真正的「相見恨晚!」

PHP有一個名為DateTime的類,可以幫助您讀取、寫入、比較或計算日期和時間。除了DATETIME之外,PHP中還有許多與日期和時間相關的函數,但它為大多數常見用途提供了良好的面向對象介面。它可以處理時區,但這不在這個簡短的介紹範圍之內。

要開始使用DateTime,請使用createFromFormat()工廠方法將原始日期和時間字元串轉換為對象,或者執行新的DateTime以獲取當前日期和時間。使用format()方法將日期時間轉換回用於輸出的字元串。

<?php$raw = '22. 11. 1968';$start = DateTime::createFromFormat('d. m. Y', $raw);echo 'Start date: ' . $start->format('Y-m-d') . "n";

使用DateInterval類可以使用DateTime進行計算。DateTime有像add()和sub()這樣的方法,它們以DateInterval為參數。不要編寫期望每天都有相同秒數的程式碼,夏令時和時區更改都會打破這一假設。改為使用日期間隔。要計算日期差異,請使用diff()方法。它將返回新的DateInterval,非常容易顯示。

<?php// 克隆一份 $start ,在其基礎上加一個月零6天$end = clone $start;$end->add(new DateInterval('P1M6D'));$diff = $end->diff($start);echo 'Difference: ' . $diff->format('%m month, %d days (total: %a days)') . "n";// 差值: 1 個月, 6 天 (總共: 37 天)

對於DateTime對象,您可以使用標準比較:

<?phpif ($start < $end) {    echo "Start is before the end!n";}

最後一個演示DatePeriod類的示例。它用於迭代重複發生的事件。它可以接受兩個DateTime對象,Start和End,以及返回這兩個對象之間所有事件的間隔。

<?php// 輸出 $start 和 $end 之間所有的周四$periodInterval = DateInterval::createFromDateString('first thursday');$periodIterator = new DatePeriod($start, $periodInterval, $end, DatePeriod::EXCLUDE_START_DATE);foreach ($periodIterator as $date) {    // 輸出周期內的每個日期    echo $date->format('Y-m-d') . ' ';}

一個流行的PHP API擴展是Carbon。它繼承了DateTime類中的所有內容,因此涉及的程式碼更改最少,但額外的功能包括本地化支援、添加、減去和格式化DateTime對象的進一步方法,以及通過模擬您選擇的日期和時間來測試程式碼的方法。

Carbon提供了一些很好的功能來處理 PHP 中的日期,特別是諸如:

  • 處理時區
  • 輕鬆獲取當前時間
  • 將 datetime 轉換成可讀的內容
  • 將英語短語解析成 datetime (first day of January 2016)
  • 日期的加減 (+ 2 weeks, -6 months)
  • 處理日期的語義方法

所有的這些都帶來了一個非常有用的包,使得這些在 PHP 中處理時間非常容易。

// 獲取當前時間  - 2015-12-19 10:10:54$current = Carbon::now();$current = new Carbon();// 獲取今天 - 2015-12-19 00:00:00$today = Carbon::today();// 獲取昨天 - 2015-12-18 00:00:00$yesterday = Carbon::yesterday();// 獲取明天 - 2015-12-20 00:00:00$tomorrow = Carbon::tomorrow();// 解析特定字元串 - 2016-01-01 00:00:00$newYear = new Carbon('first day of January 2016');// 設定一個特定的時區 - 2016-01-01 00:00:00$newYearPST = new Carbon('first day of January 2016', 'AmericaPacific');

Carbon 能做的遠遠不止這些。請務必查看 Carbon 官方文檔。希望這能幫助你在 PHP 中更容易的使用日期 / 時間並加快開發效率!

Tags: