首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

PHP 模擬 SQL Server DATEADD 與 DATEDIFF 日期函數實作

     編輯:關於SqlServer

前置條件

所有日期參數需為 Unix Timestamp (整數秒數),可用 mktime() 或 strtotime() 產生。

DATEADD 模擬

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']);
}

DATEDIFF 模擬

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 行為)。
  • PHP 5.3+ 建議改用 DateTime / DateInterval 物件導向 API,支援時區、夏令時間等複雜場景。

此兩函數可快速移植 SQL Server 日期邏輯至 PHP 專案,補足早期 PHP 日期運算不足。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved