核心函數速查表
| 函數 | 用途 | 範例 |
checkdate(m,d,Y) | 驗證日期合法性 | checkdate(2,30,2005) → false |
getdate([ts]) | 取得日期時間陣列 | getdate() → ['year'=>2024,'mon'=>1,...] |
mktime(h,i,s,m,d,Y) | 生成 Unix 時間戳 | mktime(13,15,23,6,7,2006) |
date(fmt,[ts]) | 格式化日期字串 | date("Y-m-d H:i:s") |
strtotime(str) | 英文文字轉時間戳 | strtotime("+3 days") |
strftime(fmt,[ts]) | 本地化格式化 | setlocale(LC_TIME,'zh_TW'); strftime("%A") |
microtime() | 微秒級時間(效能測量) | $t=microtime(true); ... $t2-$t |
gmdate/gmmktime | GMT/UTC 時間處理 | gmdate("Y-m-d H:i:s") |
date_default_timezone_set() | 設定預設時區 (PHP 5.1+) | date_default_timezone_set('Asia/Taipei') |
實戰常用模式
1. 日期驗證與正規化
<?php
function normalizeDate($y, $m, $d) {
if (!checkdate($m, $d, $y)) return false;
return sprintf('%04d-%02d-%02d', $y, $m, $d);
}
?>
2. 相對時間計算
<?php
echo date('Y-m-d', strtotime('today')); // 今天
echo date('Y-m-d', strtotime('tomorrow')); // 明天
echo date('Y-m-d', strtotime('+3 days')); // 3天後
echo date('Y-m-d', strtotime('first day of next month'));
3. 效能測量
<?php
$start = microtime(true);
for ($i=0; $i<100000; $i++) { $x = $i * $i; }
$end = microtime(true);
echo "Elapsed: " . ($end - $start) . " sec";
4. 時區最佳實踐
<?php
// 程式入口統一設定
date_default_timezone_set('Asia/Taipei');
// 儲存資料庫統一用 UTC
$utc = new DateTime('now', new DateTimeZone('UTC'));
$dbValue = $utc->format('Y-m-d H:i:s');
// 顯示給用戶轉換回目標時區
$userTz = new DateTimeZone('Asia/Taipei');
$local = clone $utc;
$local->setTimezone($userTz);
echo $local->format('Y-m-d H:i:s');
DateTime 類別(PHP 5.2+ 推薦)
- 物件導向、不可變(
DateTimeImmutable PHP 5.5+)
- 支援時區轉換、差值計算(
DateInterval)、格式化
- 解決 32 位系統 2038 年問題(64 位整數時間戳)