?
本文檔使用 php中文網(wǎng)手冊 發(fā)布
PHP 中 DateTime 類的作用是在你讀、寫、比較或者計(jì)算日期和時(shí)間時(shí)提供幫助。除了 DateTime 類之外,PHP 還有很多與日期和時(shí)間相關(guān)的函數(shù),但 DateTime 類為大多數(shù)常規(guī)使用提供了優(yōu)秀的面向?qū)ο蠼涌?。它還可以處理時(shí)區(qū),不過這并不在這篇簡短的介紹之內(nèi)。
在使用 DateTime 之前,通過 createFromFormat() 工廠方法將原始的日期與時(shí)間字符串轉(zhuǎn)換為對象或使用 new DateTime 來取得當(dāng)前的日期和時(shí)間。使用 format() 將 DateTime 轉(zhuǎn)換回字符串用于輸出。
<?php $raw = '22. 11. 1968'; $start = DateTime::createFromFormat('d. m. Y', $raw); echo 'Start date: ' . $start->format('Y-m-d') . "\n";
對 DateTime 進(jìn)行計(jì)算時(shí)可以使用 DateInterval 類。DateTime 類具有例如 add() 和 sub() 等將 DateInterval 當(dāng)作參數(shù)的方法。編寫代碼時(shí)注意不要認(rèn)為每一天都是由相同的秒數(shù)構(gòu)成的,不論是夏令時(shí)(DST)還是時(shí)區(qū)轉(zhuǎn)換,使用時(shí)間戳計(jì)算都會(huì)遇到問題,應(yīng)當(dāng)選擇日期間隔。使用 diff() 方法來計(jì)算日期之間的間隔,它會(huì)返回新的 DateInterval,非常容易進(jìn)行展示。
<?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 對象之間可以直接進(jìn)行比較:
<?php if ($start < $end) { echo "Start is before the end!\n"; }
最后一個(gè)例子來演示 DatePeriod 類。它用來對循環(huán)的事件進(jìn)行迭代。向它傳入開始時(shí)間、結(jié)束時(shí)間和間隔區(qū)間,會(huì)得到這其中所有的事件。
<?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 是一個(gè)很受歡迎的 PHP API 擴(kuò)展。它繼承了 DateTime 類的所有功能,因此只需修改很少的代碼就可以使用更多額外的功能,例如支持本地化、日期加減以及格式化 Datetime 對象,另外還能根據(jù)你的選擇來模擬日期和時(shí)間并測試你的代碼。