萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHP 與 MySQL 實作:查詢今日、本週、本月、今年數據完整教學

前言

在開發 PHP 應用時,常需要依據時間範圍篩選資料庫記錄。本文整理了以 Unix 時間戳為儲存格式的資料表,如何撰寫 SQL 查詢「今日」、「本週」、「本月」及「今年」的資料,並提供 PHP 取得各時間區間起始與結束時間戳的實用函式,方便直接套用專案中。

資料表假設

  • 表名:table_name(範例中亦出現 video,請依實際情況修改)
  • 時間欄位:time,型別為 INT,儲存 Unix 時間戳

1. 查詢今日資料

透過 PHP 產生今日 00:00:00 與目前時間的字串,再用 unix_timestamp() 轉換為時間戳進行比對。

$start = date('Y-m-d 00:00:00');
$end   = date('Y-m-d H:i:s');

$sql = "SELECT * FROM `table_name` 
        WHERE `time` >= unix_timestamp('$start') 
          AND `time` <= unix_timestamp('$end')";

2. 查詢本週資料

MySQL 的 YEARWEEK() 函式可取得年份與週數。第二個參數設為 1,表示以週一為每週第一天(符合中文習慣)。

SELECT * FROM `table_name` 
WHERE YEARWEEK(FROM_UNIXTIME(`time`, '%Y-%m-%d %H:%i:%s'), 1) 
      = YEARWEEK(NOW(), 1);

補充說明:

  • DAYOFWEEK():週日為 1,週一為 2 … 週六為 7。
  • WEEKDAY():週一為 0,週二為 1 … 週日為 6。若需符合中文習慣,可用 WEEKDAY() + 1。

3. 查詢本月資料

取得本月第一天 00:00:00 及目前時間。

$start = date('Y-m-01 00:00:00');
$end   = date('Y-m-d H:i:s');

$sql = "SELECT * FROM `table_name` 
        WHERE `time` >= unix_timestamp('$start') 
          AND `time` <= unix_timestamp('$end')";

4. 查詢今年資料

$start = date('Y-01-01 00:00:00');
$end   = date('Y-m-d H:i:s');

$sql = "SELECT * FROM `table_name` 
        WHERE `time` >= unix_timestamp('$start') 
          AND `time` <= unix_timestamp('$end')";

5. PHP 取得常用時間區間的起始/結束時間戳

利用 mktime() 快速計算,適用於程式邏輯中直接比對時間戳,避免在 SQL 內轉換格式。

今日

$beginToday = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
$endToday   = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1;

昨日

$beginYesterday = mktime(0, 0, 0, date('m'), date('d') - 1, date('Y'));
$endYesterday   = mktime(0, 0, 0, date('m'), date('d'), date('Y')) - 1;

上週(以週一為起始)

$beginLastWeek = mktime(0, 0, 0, date('m'), date('d') - date('w') + 1 - 7, date('Y'));
$endLastWeek   = mktime(23, 59, 59, date('m'), date('d') - date('w') + 7 - 7, date('Y'));

本月

$beginThisMonth = mktime(0, 0, 0, date('m'), 1, date('Y'));
$endThisMonth   = mktime(23, 59, 59, date('m'), date('t'), date('Y'));

mktime() 參數速查

參數說明
hour時(可選)
minute分(可選)
second秒(可選)
month月(可選)
day日(可選)
year年(可選)
is_dst夏令時標記,PHP 5.1 後已棄用,請改用時區設定

參數可由右至左依序省略,預設為當前 GMT 時間。

小結

掌握上述查詢語法與 PHP 時間戳函式,即可輕鬆處理大多數「按時間範圍統計」的需求。實際專案中建議將常用區間封裝為工具類或 Helper 函式,提升程式碼複用性與可維護性。

copyright © 萬盛學電腦網 all rights reserved