?
This document uses PHP Chinese website manual Release
PHP 中 DateTime 類的作用是在你讀、寫、比較或者計算日期和時間時提供幫助。除了 DateTime 類之外,PHP 還有很多與日期和時間相關的函數(shù),但 DateTime 類為大多數(shù)常規(guī)使用提供了優(yōu)秀的面向對象接口。它還可以處理時區(qū),不過這并不在這篇簡短的介紹之內。
在使用 DateTime 之前,通過 createFromFormat() 工廠方法將原始的日期與時間字符串轉換為對象或使用 new DateTime 來取得當前的日期和時間。使用 format() 將 DateTime 轉換回字符串用于輸出。
<?php $raw = '22. 11. 1968'; $start = DateTime::createFromFormat('d. m. Y', $raw); echo 'Start date: ' . $start->format('Y-m-d') . "\n";
對 DateTime 進行計算時可以使用 DateInterval 類。DateTime 類具有例如 add() 和 sub() 等將 DateInterval 當作參數(shù)的方法。編寫代碼時注意不要認為每一天都是由相同的秒數(shù)構成的,不論是夏令時(DST)還是時區(qū)轉換,使用時間戳計算都會遇到問題,應當選擇日期間隔。使用 diff() 方法來計算日期之間的間隔,它會返回新的 DateInterval,非常容易進行展示。
<?php // create a copy of $start and add one month and 6 days $end = clone $start; $end->add(new DateInterval('P1M6D')); $diff = $end->diff($start); echo 'Difference: ' . $diff->format('%m month, %d days (total: %a days)') . "\n"; // Difference: 1 month, 6 days (total: 37 days)
DateTime 對象之間可以直接進行比較:
<?php if ($start < $end) { echo "Start is before the end!\n"; }
最后一個例子來演示 DatePeriod 類。它用來對循環(huán)的事件進行迭代。向它傳入開始時間、結束時間和間隔區(qū)間,會得到這其中所有的事件。
<?php // output all thursdays between $start and $end $periodInterval = DateInterval::createFromDateString('first thursday'); $periodIterator = new DatePeriod($start, $periodInterval, $end, DatePeriod::EXCLUDE_START_DATE); foreach ($periodIterator as $date) { // output each date in the period echo $date->format('Y-m-d') . ' '; }
Carbon 是一個很受歡迎的 PHP API 擴展。它繼承了 DateTime 類的所有功能,因此只需修改很少的代碼就可以使用更多額外的功能,例如支持本地化、日期加減以及格式化 Datetime 對象,另外還能根據(jù)你的選擇來模擬日期和時間并測試你的代碼。