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

PHP 模擬 SQL Server 日期函數:dateadd 與 datediff 實作

     編輯:PHP 相關知識

背景

PHP 日期運算不如 SQL Server 直觀(如 DATEADD(month, 3, GETDATE()))。本文提供兩個函數模擬 dateadd、datediff,輸入均為 Unix timestamp。

dateadd:日期加減

function dateadd($part, $n, $datetime) {
    $year  = date("Y", $datetime);
    $month = date("m", $datetime);
    $day   = date("d", $datetime);
    $hour  = date("H", $datetime);
    $min   = date("i", $datetime);
    $sec   = date("s", $datetime);

    switch (strtolower($part)) {
        case "year":  $year  += $n; break;
        case "month": $month += $n; break;
        case "day":   $day   += $n; break;
        case "hour":  $hour  += $n; break;
        case "min":   $min   += $n; break;
        case "sec":   $sec   += $n; break;
        default: return 0;
    }
    return mktime($hour, $min, $sec, $month, $day, $year);
}

datediff:日期差值

function datediff($part, $date1, $date2) {
    $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);
    $i1 = date("i", $date1); $i2 = date("i", $date2);
    $s1 = date("s", $date1); $s2 = date("s", $date2);

    switch (strtolower($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,$i2,0,$m2,$d2,$y2) - mktime($h1,$i1,0,$m1,$d1,$y1)) / 60;
        case "sec":   return $date2 - $date1;
        default: return 0;
    }
}

使用範例

$today = mktime(0,0,0, date("m"), date("d"), date("Y"));
$threeMonthsLater = dateadd("month", 3, $today);
$diffDays = datediff("day", $today, $threeMonthsLater); // 約 90~92

現代替代方案

PHP 5.3+ 推薦使用 DateTime + DateInterval + DatePeriod 物件導向 API,功能更強、時區處理更正確。

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