本篇重點
time()
取得當前時間戳記date()
格式化時間strtotime()
將字串轉換為時間戳記mktime()
建立時間戳記checkdate()
驗證日期是否有效
time()
- 取得當前時間戳記
回傳從 Unix 紀元(1970-01-01 00:00:00 UTC)至今的秒數。
範例:
1 | // 輸出當前的 Unix 時間戳記 |
time() - 取得當前時間戳記
date()
- 格式化時間
可用來格式化時間戳記,讓時間以可讀的方式顯示。
date() - 格式化時間
1 | // 預設為輸出當下的格式化時間,可指定需格式化的時間點 |
常用格式:
格式 | 說明 | 範例 |
---|---|---|
Y | 完整四位數西元年份,使用 - 表示公元前 | 2025 、-0055 、0787 |
m | 兩位數月份,沒有十位數會補零 | 02 、07 、12 |
d | 兩位數日期,沒有十位數會補零 | 14 、25 、06 |
H | 24 小時制兩位數小時,沒有十位數會補零 | 00 到 23 |
i | 分鐘,沒有十位數會補零 | 00 到 59 |
s | 秒,沒有十位數會補零 | 00 到 59 |
w | 星期幾,數字表示 | 0 (表示星期天) 到 6 (表示星期六) |
範例:
1 | // 以 YYYY-MM-DD HH:MM:SS 格式輸出當下時間 |
strtotime()
- 將字串轉換為時間戳記
將各種時間字串(如 yesterday、+1 week)轉換為 Unix 時間戳。
strtotime() - 將字串轉換為時間戳記
1 | // 預設基礎時間點為當下的時間戳,可指定基礎時間點 |
常見日期時間字串應用:
絕對時間(Absolute Dates)
具體的日期時間,這個類型的關鍵字會忽略 strtotime()
的第二個參數 $baseTimestamp
時間字串 | 解析時間(假設今天是 2025-02-14) |
---|---|
2025-01-01 | 2025-01-01 00:00:00 |
2025-04-31 08:11 | 2025-04-31 08:11:00 |
2025-12-06 noon | 2025-12-06 12:00:00 |
範例:
1 | // 取得 2025-01-01 的時間戳 |
相對時間(Relative Dates)
基於 $baseTimestamp
進行計算,預設為當下的時間(time()
)
時間字串 | 解析時間(假設現在是 2025-02-14 15:30:45) |
---|---|
+1 day | 2025-02-15 15:30:45 |
-1 day | 2025-02-13 15:30:45 |
+2 weeks | 2025-02-28 15:30:45 |
-3 months | 2024-11-14 15:30:45 |
+5 years | 2030-02-14 15:30:45 |
today | 2025-02-14 00:00:00 |
yesterday | 2025-02-13 00:00:00 |
tomorrow | 2025-02-15 00:00:00 |
now | 2025-02-14 15:30:45 |
midnight | 2025-02-14 00:00:00 |
noon | 2025-02-14 12:00:00 |
範例:
1 | // 假設現在是 2025-02-21 17:54:45 |
mktime()
- 建立時間戳記
建立特定時間的 Unix 時間戳。
1 | mktime(int $hour, int $minute, int $second, int $month, int $day, int $year) |
範例:
1 | // 取得 2025-02-14 00:00:00 的時間戳 |
mktime() - 建立時間戳記
checkdate()
- 驗證日期是否有效
檢查一個日期是否有效,回傳布林值(boolean)。
1 | // 2024-02-29 是否為有效日期 |
checkdate() - 驗證日期是否有效
結論
這邊整理了我常用的的日期時間函數,後端記錄資料的時候很常需要日期時間、timestamp 的轉換,或是執行排程可能也會需要計算時間來撈取資料等。
time()
- 取得當前時間戳記date()
- 格式化時間strtotime()
- 將字串轉換為時間戳記mktime()
- 建立時間戳記checkdate()
- 驗證日期是否有效
平常也會使用日期時間函數嗎?有甚麼更方便的函數嗎?歡迎留言跟大家分享!