iT邦幫忙

2021 iThome 鐵人賽

DAY 6
0
Modern Web

工作後才知道的後端 30 件小事系列 第 6

如何用 PHP 檢查字串是否為合法的日期?

How to check string is a valid date in PHP?

提供幾個方案:

  1. regex
  2. DateTime
  3. strtotime

Regex

優點:

  • 直覺
  • 可以練一下正規表達式

缺點:

  • 不同月份天數不同檢查比較麻煩,可能要寫的很複雜;
    像是下面的寫法,輸入 2021-06-31 會過,但6月沒有31號
public function validateDate(string $date)
{
    return (bool)preg_match(
        "/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/",
        $date
    );
}

DateTime

優點:

  • 可以檢查多種格式(format)
  • 可以檢查不同月份天數,例如 2021-02-29 可以檢查出錯
/**
 *
 * Validate if input string is valid DATE format
 *
 * @param    string  $date   Such as "2020-12-12"
 * @param    string  $format Validation rule will depands on this
 * @return   boolean         If date format valid, return true
 *
 */
public function validateDate(string $date, string $format = 'Y-m-d')
{
    $d = DateTime::createFromFormat($format, $date);
    return $d && $d->format($format) == $date;
}

strtotime

優點:

  • 同上,但更簡短
public function validateDate(string $date, string $format = 'Y-m-d')
{
    return date($format, strtotime($date)) == $date;
}

References


上一篇
匯入大量資料到 docker 上的資料庫:mysql-client
下一篇
PHP 檢查是否符合程式碼風格:CodeSniffer
系列文
工作後才知道的後端 30 件小事20

尚未有邦友留言

立即登入留言