萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 指定日期時間範圍查詢:mktime 時間戳加減實戰

核心思路

資料庫時間欄位儲存為 INT(10) Unix 時間戳,應用層用 mktime() 計算邊界值,SQL 僅做數值比較,極高效能。

PHP 計算常用範圍

$now = time(); // 當前時間戳

// 1 小時前
$one_hour_ago = mktime(date('H')-1, date('i'), date('s'), date('m'), date('d'), date('Y'));

// 7 天前
$seven_days_ago = mktime(date('H'), date('i'), date('s'), date('m'), date('d')-7, date('Y'));

// 1 個月前
$one_month_ago = mktime(date('H'), date('i'), date('s'), date('m')-1, date('d'), date('Y'));

// 3 個月前
$three_months_ago = mktime(date('H'), date('i'), date('s'), date('m')-3, date('d'), date('Y'));

SQL 查詢範例

$where = " WHERE dtime >= $three_months_ago";
$sql = "SELECT * FROM testtable $where";

MySQL 原生日期函數替代(推薦)

若欄位為 DATETIME/TIMESTAMP,直接用函數更直觀且利用索引:

-- 近 3 個月
WHERE createtime >= DATE_SUB(NOW(), INTERVAL 3 MONTH)

-- 近 7 天
WHERE createtime >= DATE_SUB(NOW(), INTERVAL 7 DAY)

-- 近 1 小時
WHERE createtime >= DATE_SUB(NOW(), INTERVAL 1 HOUR)

注意

  • mktime 參數順序:時、分、秒、月、日、年。
  • 月份減法跨年自動處理(mktime(..., 0, ...) 會自動變為上一年 12 月)。
  • 儲存時間戳建議用 INT UNSIGNED(支援至 2106 年),或直接用 DATETIME(支援至 9999 年)。
copyright © 萬盛學電腦網 all rights reserved