表單傳來的 `2015-9-9` 轉為標準 `2015-09-09`,利於資料庫查詢與排序。
$y = '2015'; $m = '9'; $d = '9';
if (!checkdate($m, $d, $y)) exit('日期無效');
$ts = mktime(0,0,0, $m, $d, $y); // 交給 PHP 自動補零
$std = date('Y-m-d', $ts); // 2015-09-09
避免手動減 1 導致月份/年份跨界錯誤。
date_default_timezone_set('Asia/Shanghai');
$yesterdayTs = strtotime('-1 day'); // 自動處理跨月/跨年
$y = date('Y', $yesterdayTs);
$m = date('m', $yesterdayTs);
$d = date('d', $yesterdayTs);
$dayStart = mktime(0,0,0, $m, $d, $y); // 00:00:00
$dayEnd = mktime(23,59,59, $m, $d, $y); // 23:59:59
// 驗證
echo ($dayEnd - $dayStart) / 3600; // 24
strtotime('+1 week'); // 一週後
strtotime('first day of next month'); // 下月 1 號
strtotime('last Friday'); // 上週五
strtotime('2023-12-25 +3 days'); // 指定基準日運算
$dt = new DateTime('now', new DateTimeZone('Asia/Shanghai'));
$dt->modify('+1 month')->setTime(0,0,0); // 下月 1 號 00:00
echo $dt->format('Y-m-d H:i:s');
// 計算差異
$d1 = new DateTime('2023-01-01');
$d2 = new DateTime('2023-12-31');
$diff = $d1->diff($d2);
echo $diff->days; // 364
echo $diff->format('%m月 %d天');
| 字元 | 說明 | 範例 |
|---|---|---|
| Y | 4 位數年 | 2023 |
| m | 2 位數月 (補零) | 09 |
| n | 月 (不補零) | 9 |
| d | 2 位數日 (補零) | 05 |
| H | 24 小時制 (補零) | 14 |
| i | 分 (補零) | 05 |
| s | 秒 (補零) | 09 |
| w | 星期 (0=日) | 3 |