所有日期參數需為 Unix Timestamp (整數秒數),可用 mktime() 或 strtotime() 產生。
function dateadd($part, $number, $timestamp) {
$part = strtolower($part);
$date = getdate($timestamp);
switch ($part) {
case 'year': $date['year'] += $number; break;
case 'month': $date['mon'] += $number; break;
case 'day': $date['mday'] += $number; break;
case 'hour': $date['hours'] += $number; break;
case 'min': $date['minutes']+= $number; break;
case 'sec': $date['seconds']+= $number; break;
default: return false;
}
return mktime($date['hours'], $date['minutes'], $date['seconds'],
$date['mon'], $date['mday'], $date['year']);
}
function datediff($part, $timestamp1, $timestamp2) {
$part = strtolower($part);
$d1 = getdate($timestamp1);
$d2 = getdate($timestamp2);
switch ($part) {
case 'year': return $d2['year'] - $d1['year'];
case 'month': return ($d2['year'] - $d1['year'])*12 + $d2['mon'] - $d1['mon'];
case 'day': return floor(($timestamp2 - $timestamp1) / 86400);
case 'hour': return floor(($timestamp2 - $timestamp1) / 3600);
case 'min': return floor(($timestamp2 - $timestamp1) / 60);
case 'sec': return $timestamp2 - $timestamp1;
default: return false;
}
}
$now = time();
$nextMonth = dateadd('month', 1, $now);
$diffDays = datediff('day', strtotime('2023-01-01'), $now);
echo "下個月這天: " . date('Y-m-d', $nextMonth) . "\n";
echo "距離 2023-01-01 相差天數: " . $diffDays;
mktime() 自動處理 (如 1 月 -1 月 → 去年 12 月)。datediff('month') 僅計算年月差,忽略日期 (同 SQL Server 行為)。DateTime / DateInterval 物件導向 API,支援時區、夏令時間等複雜場景。此兩函數可快速移植 SQL Server 日期邏輯至 PHP 專案,補足早期 PHP 日期運算不足。