24

以下は、以前に日付を確認した方法です。日付形式を変換する独自の関数もありましたが、現在は PHP の DateTime クラスを使用しているため、不要になりました。DataTime を使用して有効な日付を確認するにはどうすればよいですか? そもそも私が DataTime を使うべきだと思うかどうかも教えてください。ありがとう

PS。プロシージャル スタイルではなく、オブジェクト指向スタイルを使用しています。

static public function verifyDate($date)
{
  //Given m/d/Y and returns date if valid, else NULL.
  $d=explode('/',$date);
  return ((isset($d[0])&&isset($d[1])&&isset($d[2]))?(checkdate($d[0],$d[1],$d[2])?$date:NULL):NULL);
}
4

7 に答える 7

72

これを試すことができます:

static public function verifyDate($date)
{
    return (DateTime::createFromFormat('m/d/Y', $date) !== false);
}

これは true/false を出力します。DateTimeオブジェクトを直接返すことができます:

static public function verifyDate($date)
{
    return DateTime::createFromFormat('m/d/Y', $date);
}

次にDateTime、失敗時にオブジェクトまたは false を返します。

アップデート:

createFromFormat が 45/45/2014 のような無効な日付を受け入れることを示した Elvis Ciotti に感謝します。詳細については、https ://stackoverflow.com/a/10120725/1948627 をご覧ください。

厳密なチェック オプションを使用してメソッドを拡張しました。

static public function verifyDate($date, $strict = true)
{
    $dateTime = DateTime::createFromFormat('m/d/Y', $date);
    if ($strict) {
        $errors = DateTime::getLastErrors();
        if (!empty($errors['warning_count'])) {
            return false;
        }
    }
    return $dateTime !== false;
}
于 2013-01-24T15:37:15.277 に答える
11

このリソースを確認できます: http://php.net/manual/en/datetime.getlasterrors.php

PHPコードは次のように述べています:

try {
    $date = new DateTime('asdfasdf');
} catch (Exception $e) {
    print_r(DateTime::getLastErrors());
    // or
    echo $e->getMessage();
}
于 2013-01-24T15:44:01.590 に答える