dateadd 函數
function dateadd($part, $n, $datetime) {
$part = strtolower($part);
$y = date('Y', $datetime);
$m = date('m', $datetime);
$d = date('d', $datetime);
$h = date('H', $datetime);
$mi = date('i', $datetime);
$s = date('s', $datetime);
switch ($part) {
case 'year': $y += $n; break;
case 'month': $m += $n; break;
case 'day': $d += $n; break;
case 'hour': $h += $n; break;
case 'min': $mi += $n; break;
case 'sec': $s += $n; break;
default: return 0;
}
return mktime($h, $mi, $s, $m, $d, $y);
}
datediff 函數
function datediff($part, $date1, $date2) {
$part = strtolower($part);
$y1 = date('Y', $date1); $y2 = date('Y', $date2);
$m1 = date('m', $date1); $m2 = date('m', $date2);
$d1 = date('d', $date1); $d2 = date('d', $date2);
$h1 = date('H', $date1); $h2 = date('H', $date2);
$mi1 = date('i', $date1); $mi2 = date('i', $date2);
$s1 = date('s', $date1); $s2 = date('s', $date2);
switch ($part) {
case 'year': return $y2 - $y1;
case 'month': return ($y2 - $y1) * 12 + $m2 - $m1;
case 'day': return (mktime(0,0,0,$m2,$d2,$y2) - mktime(0,0,0,$m1,$d1,$y1)) / 86400;
case 'hour': return (mktime($h2,0,0,$m2,$d2,$y2) - mktime($h1,0,0,$m1,$d1,$y1)) / 3600;
case 'min': return (mktime($h2,$mi2,0,$m2,$d2,$y2) - mktime($h1,$mi1,0,$m1,$d1,$y1)) / 60;
case 'sec': return $date2 - $date1;
default: return 0;
}
}
使用範例
$now = mktime(0,0,0,date('m'),date('d'),date('Y'));
$future = dateadd('month', 3, $now);
$diff = datediff('day', $now, $future); // 約 90
注意
- PHP 5.3+ 建議直接使用
DateTime 類別與 DateInterval,功能更完整且處理閏年/時區正確。
- 上述函數為模擬 SQL Server 行為,月份跨界邏輯以
mktime 自動修正。