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

PHP 使用 strtotime 與 date 函數驗證日期有效性的實作教學

     編輯:PHP 相關知識

在 PHP 開發中,判斷一個日期字串是否有效看似簡單,實則暗藏玄機。不僅要檢查格式是否正確(如 Y-m-d),更要驗證日期本身是否存在(例如 2013-02-29 格式正確但日期無效,而 2012-02-29 則完全有效)。若單純使用正則表達式,不僅難以維護,也難以涵蓋閏年、每月天數差異等邏輯。

核心思路:善用 strtotime 與 date 互驗

這裡提供一個輕量級函數 checkDateIsValid(),核心邏輯只有兩步:

  1. 嘗試用 strtotime() 將字串轉為 Unix 時間戳;若失敗直接回傳 false(格式錯誤或無法解析)。
  2. 將時間戳用候選格式(預設 Y-m-d、Y/m/d)再格式化一次,若與原字串完全一致,即視為有效日期。

完整程式碼範例

/**
 * 檢查日期字串是否為有效日期
 * @param string $date 待驗證日期字串
 * @param array  $formats 允許的格式陣列,預設支援 Y-m-d 與 Y/m/d
 * @return bool
 */
function checkDateIsValid($date, $formats = array("Y-m-d", "Y/m/d")) {
    $unixTime = strtotime($date);
    if (!$unixTime) {
        return false; // strtotime 解析失敗,格式不合法
    }
    // 只要符合任一允許格式即視為有效
    foreach ($formats as $format) {
        if (date($format, $unixTime) == $date) {
            return true;
        }
    }
    return false;
}

實測範例

var_dump(checkDateIsValid("2013-09-10")); // true
var_dump(checkDateIsValid("2013-09-ha")); // false
var_dump(checkDateIsValid("2012-02-29")); // true  (閏年)
var_dump(checkDateIsValid("2013-02-29")); // false (平年)

注意事項

  • strtotime() 能解析的格式有限,若專案需支援極特殊格式(如 2023年05月01日),需自行擴充格式陣列或改用 DateTime::createFromFormat()。
  • 函數預設僅驗證「日期」部分,若需包含時間,請自行在 $formats 加入 H:i:s 等格式。

這個做法避開了複雜正則,利用 PHP 內建日期解析引擎自動處理閏年、月份天數等邊界條件,程式碼簡潔且易維護,適合大多數專案場景。

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