PHP 中 DateTime 類的作用是在你讀、寫、比較或者計算日期和時間時提供幫助。除了 DateTime 類之外,PHP 還有很多與日期和時間相關的函數,但 DateTime 類為大多數常規使用提供了優秀的面向對象接口。它還可以處理時區,不過這并不在這篇簡短的介紹之內。
在使用 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 當作參數的方法。編寫代碼時注意不要認為每一天都是由相同的秒數構成的,不論是夏令時(DST)還是時區轉換,使用時間戳計算都會遇到問題,應當選擇日期間隔。使用 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 end!\n";
}
~~~
最后一個例子來演示 DatePeriod 類。它用來對循環的事件進行迭代。向它傳入開始時間、結束時間和間隔區間,會得到這其中所有的事件。
~~~
<?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') . ' ';
}
~~~
* [閱讀 DateTime](http://php.net/book.datetime)
* [閱讀日期格式](http://php.net/function.date) (支持的日期字符串格式)
- 歡迎
- 入門指南
- 使用當前穩定版本
- 內置的WEB服務器
- Mac安裝
- Windows安裝
- 代碼風格指南
- 語言亮點
- 編程范式
- 命名空間
- PHP標準庫
- 命令行接口
- Xdebug
- 依賴管理
- Composer 與 Packagist
- PEAR
- 開發實踐
- 基礎知識
- 日期和時間
- 設計模式
- 使用UTF8編碼
- 依賴注入
- 基本概念
- 復雜的問題
- 容器
- 延伸閱讀
- 數據庫
- MYSQL 擴展
- PDO 擴展
- 數據庫交互
- 數據庫抽象層
- 使用模板
- 好處
- 原生PHP模板
- 編譯模板
- 延伸閱讀
- 錯誤與異常
- 錯誤
- 異常
- 安全
- Web應用程序安全
- 密碼哈希
- 數據過濾
- 配置文件
- 注冊全局變量
- 錯誤報告
- 測試
- 測試驅動開發
- 行為驅動開發
- 其他測試工具
- 服務器與部署
- Platform as a Service (PaaS)
- 虛擬或專用服務器
- 共享服務器
- 構建及部署應用
- 虛擬化
- Vagrant
- Docker
- 緩存
- Opcode緩存
- 對象緩存
- 文檔撰寫
- 資源
- 社區
- Credits