【PHP】五種實用的日期時間函數

【PHP】五種實用的日期時間函數

本篇重點

  • time() 取得當前時間戳記
  • date() 格式化時間
  • strtotime() 將字串轉換為時間戳記
  • mktime() 建立時間戳記
  • checkdate() 驗證日期是否有效

如果想把日期時間換成時間戳或是時間戳換成日期時間,歡迎使用本站的 timestamp 轉換工具

time() - 取得當前時間戳記

回傳從 Unix 紀元(1970-01-01 00:00:00 UTC)至今的秒數。

範例:

php
1
2
3
// 輸出當前的 Unix 時間戳記
$timestamp = time();
echo "目前的 Unix 時間戳記:" . $timestamp;

date() - 格式化時間

可用來格式化時間戳記,讓時間以可讀的方式顯示。

php
1
2
// 預設為輸出當下的格式化時間,可指定需格式化的時間點
date(string $format, int $timestamp = time())

常用格式:

格式說明範例
Y完整四位數西元年份,使用 - 表示公元前2025-00550787
m兩位數月份,沒有十位數會補零020712
d兩位數日期,沒有十位數會補零142506
H24 小時制兩位數小時,沒有十位數會補零0023
i分鐘,沒有十位數會補零0059
s秒,沒有十位數會補零0059
w星期幾,數字表示0(表示星期天) 到 6(表示星期六)

範例:

php
1
2
3
4
5
6
// 以 YYYY-MM-DD HH:MM:SS 格式輸出當下時間
echo date('Y-m-d H:i:s');

// 以 YYYY/MM/DD HH:MM:SS 格式輸出時間戳 1739690772
echo date('Y/m/d H:i:s', 1739690772);
// 2025/02/16 15:26:12

strtotime() - 將字串轉換為時間戳記

將各種時間字串(如 yesterday、+1 week)轉換為 Unix 時間戳。

健忘筆記

如果執行日期運算的環境沒有設定自己的時區或是想指定時區,可以使用 date_default_timezone_set() 調整。

php
1
2
// 預設基礎時間點為當下的時間戳,可指定基礎時間點
strtotime(string $datetime, int $baseTimestamp = time())

常見日期時間字串應用:

絕對時間(Absolute Dates)

具體的日期時間,這個類型的關鍵字會忽略 strtotime() 的第二個參數 $baseTimestamp

時間字串解析時間(假設今天是 2025-02-14)
2025-01-012025-01-01 00:00:00
2025-04-31 08:112025-04-31 08:11:00
2025-12-06 noon2025-12-06 12:00:00

範例:

php
1
2
3
4
5
6
7
8
9
10
11
// 取得 2025-01-01 的時間戳
echo strtotime('2025-01-01');
// 1735660800 - 2025-01-01 00:00:00

// 取得 2025-04-31 08:11 的時間戳
echo strtotime('2025-04-31 08:11');
// 1746058260 - 2025-05-01 08:11:00

// 取得 2025-12-06 12:00:00 的時間戳 (不受 1740047219 影響)
echo strtotime('2025-12-06 noon', 1740047219);
// 1764993600 - 2025-12-06 12:00:00

健忘筆記

具體的日期時間取得時間戳不受 strtotime() 的第二個參數 $baseTimestamp 影響

相對時間(Relative Dates)

基於 $baseTimestamp 進行計算,預設為當下的時間(time()

時間字串解析時間(假設現在是 2025-02-14 15:30:45)
+1 day2025-02-15 15:30:45
-1 day2025-02-13 15:30:45
+2 weeks2025-02-28 15:30:45
-3 months2024-11-14 15:30:45
+5 years2030-02-14 15:30:45
today2025-02-14 00:00:00
yesterday2025-02-13 00:00:00
tomorrow2025-02-15 00:00:00
now2025-02-14 15:30:45
midnight2025-02-14 00:00:00
noon2025-02-14 12:00:00

範例:

php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 假設現在是 2025-02-21 17:54:45

// 取得當下時間兩年後前一天的時間戳
echo strtotime('+2 years -1 day');
// 1803117258 - 2027-02-20 17:54:18

// 取得明天的 00:00:00 的時間戳
echo strtotime('tomorrow');
// 1740153600 - 2025-02-22 00:00:00

// 以 1740047219 (2025/02/20 18:26:59) 時間戳為基準點,取得兩年又兩星期後的時間戳
echo strtotime('+2 weeks +1 years', 1740047219);
// 1772792819 - 2026-03-06 18:26:59

// 以 1737368819 (2025/01/20 18:26:59) 時間戳為基準點,取得四天後正中午的時間戳
echo strtotime('+4 days noon', 1737368819);
// 1737691200 - 2025-01-24 12:00:00

// 以 1739960316 (2025/02/19 18:18:36) 時間戳為基準點,取得當天 00:00:00 的時間戳
echo strtotime('today', 1739960316)
// 1739894400 - 2025-02-19 00:00:00

健忘筆記

相對時間的時間字串會受 strtotime() 的第二個參數 $baseTimestamp 影響

mktime() - 建立時間戳記

建立特定時間的 Unix 時間戳。

健忘筆記

如果執行日期運算的環境沒有設定自己的時區或是想指定時區,可以使用 date_default_timezone_set() 調整。

php
1
mktime(int $hour, int $minute, int $second, int $month, int $day, int $year)

範例:

php
1
2
3
4
5
6
7
8
9
// 取得 2025-02-14 00:00:00 的時間戳
echo mktime(0, 0, 0, 2, 14, 2025);
// 1739462400

// 取得當前日期 20 天後 12:00:00 的時間戳
echo mktime(12, 0, 0, date('m'), date('d') + 20, date('Y'));

// 取得當前日期 3 個月前 14:03:00 的時間戳
echo mktime(14, 3, 0, date('m') - 3, date('d'), date('Y'));

checkdate() - 驗證日期是否有效

檢查一個日期是否有效,回傳布林值(boolean)。

php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 2024-02-29 是否為有效日期
var_dump(checkdate(2, 29, 2024));
// true,閏年 2024,2 月有 29 天

// 2024-02-30 是否為有效日期
var_dump(checkdate(2, 30, 2024));
// false,2 月最多 29 天

// 2023-04-31 是否為有效日期
var_dump(checkdate(4, 31, 2023));
// false,4 月只有 30 天

// 2023-12-25 是否為有效日期
var_dump(checkdate(12, 25, 2023));
// true

結論

這邊整理了我常用的的日期時間函數,後端記錄資料的時候很常需要日期時間、timestamp 的轉換,或是執行排程可能也會需要計算時間來撈取資料等。

  • time() - 取得當前時間戳記
  • date() - 格式化時間
  • strtotime() - 將字串轉換為時間戳記
  • mktime() - 建立時間戳記
  • checkdate() - 驗證日期是否有效

平常也會使用日期時間函數嗎?有甚麼更方便的函數嗎?歡迎留言跟大家分享!

如果想把日期時間換成時間戳或是時間戳換成日期時間,歡迎使用本站的 timestamp 轉換工具

延伸閱讀

作者

健忘工程師

發表於

2025-02-26

更新於

2025-02-26

許可協議


你可能也想看

【PHP】4種判斷變數或陣列是否存在的方法
【PHP】解析邏輯運算子 and、or、&&、|| 之間的差異
【PHP】陣列合併應用:array + array、array_merge()、array_replace()

評論

複製完成