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

PHP模擬SQL Server日期函數:DATEADD與DATEDIFF純PHP實現

     編輯:PHP 相關知識

需求背景

PHP原生日期運算不如SQL ServerDATEADD/DATEDIFF直觀,封裝兩函數提升開發效率。

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, $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";

現代替代:DateTime類


$dt = new DateTime();
$dt->modify('+1 month'); // 相當於DATEADD
$diff = $dt->diff(new DateTime('2023-01-01'));
echo $diff->days; // 相當於DATEDIFF day

建議:新項目直接使用DateTime/DateInterval,功能更強、處理閏年/時區更準確。

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