PHP原生日期運算不如SQL ServerDATEADD/DATEDIFF直觀,封裝兩函數提升開發效率。
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, $start, $end) {
$part = strtolower($part);
$diff = $end - $start; // 秒差
switch ($part) {
case 'year': return floor($diff / 31536000);
case 'month': return floor($diff / 2592000);
case 'day': return floor($diff / 86400);
case 'hour': return floor($diff / 3600);
case 'min': return floor($diff / 60);
case 'sec': return $diff;
default: return false;
}
}
$now = time();
$nextMonth = dateadd('month', 1, $now);
$daysDiff = datediff('day', strtotime('2023-01-01'), $now);
echo "下個月這天: " . date('Y-m-d', $nextMonth) . "\n";
echo "距離2023年初天數: $daysDiff\n";
$dt = new DateTime();
$dt->modify('+1 month'); // 相當於DATEADD
$diff = $dt->diff(new DateTime('2023-01-01'));
echo $diff->days; // 相當於DATEDIFF day
建議:新項目直接使用DateTime/DateInterval,功能更強、處理閏年/時區更準確。