217

API から日付文字列を受け取りましたが、形式はyyyy-mm-dd.

現在、正規表現を使用して文字列形式を検証していますが、これは正常に機能しますが、文字列によると正しい形式である可能性があるが、実際には無効な日付である場合があることがわかります。すなわち2013-13-01、例えば。

2013-13-01PHP で などの文字列を取得し、それが有効な日付であるかどうかを確認するより良い方法はありますyyyy-mm-ddか?

4

18 に答える 18

44

php のビルド済み関数を使用して簡単に使用します。

function checkmydate($date) {
  $tempDate = explode('-', $date);
  // checkdate(month, day, year)
  return checkdate($tempDate[1], $tempDate[2], $tempDate[0]);
}

テスト

   checkmydate('2015-12-01'); //true
   checkmydate('2015-14-04'); //false
于 2015-03-17T07:39:55.417 に答える
17

文字列が非標準形式であっても、文字列が日付かどうかを判断します

(strtotime はカスタム形式を受け入れません)

<?php
function validateDateTime($dateStr, $format)
{
    date_default_timezone_set('UTC');
    $date = DateTime::createFromFormat($format, $dateStr);
    return $date && ($date->format($format) === $dateStr);
}

// These return true
validateDateTime('2001-03-10 17:16:18', 'Y-m-d H:i:s');
validateDateTime('2001-03-10', 'Y-m-d');
validateDateTime('2001', 'Y');
validateDateTime('Mon', 'D');
validateDateTime('March 10, 2001, 5:16 pm', 'F j, Y, g:i a');
validateDateTime('March 10, 2001, 5:16 pm', 'F j, Y, g:i a');
validateDateTime('03.10.01', 'm.d.y');
validateDateTime('10, 3, 2001', 'j, n, Y');
validateDateTime('20010310', 'Ymd');
validateDateTime('05-16-18, 10-03-01', 'h-i-s, j-m-y');
validateDateTime('Monday 8th of August 2005 03:12:46 PM', 'l jS \of F Y h:i:s A');
validateDateTime('Wed, 25 Sep 2013 15:28:57', 'D, d M Y H:i:s');
validateDateTime('17:03:18 is the time', 'H:m:s \i\s \t\h\e \t\i\m\e');
validateDateTime('17:16:18', 'H:i:s');

// These return false
validateDateTime('2001-03-10 17:16:18', 'Y-m-D H:i:s');
validateDateTime('2001', 'm');
validateDateTime('Mon', 'D-m-y');
validateDateTime('Mon', 'D-m-y');
validateDateTime('2001-13-04', 'Y-m-d');
于 2016-10-17T10:24:15.360 に答える
15

このオプションは単純であるだけでなく、ほぼすべての形式を受け入れますが、非標準形式ではバグが発生する可能性があります。

$timestamp = strtotime($date);
return $timestamp ? $date : null;
于 2015-06-30T08:32:04.490 に答える
11

指定された日付が有効かどうかを確認する最も簡単な方法は、おそらく を使用して unixtime に変換しstrtotime、指定された日付の形式にフォーマットしてから比較することです。

function isValidDate($date) { return date('Y-m-d', strtotime($date)) === $date; }

もちろん、正規表現を使用して有効性を確認できますが、特定の形式に制限され、別の形式を満たすために編集する必要があり、必要以上になります。組み込み関数は、(ほとんどの場合) 仕事を達成するための最良の方法です。

于 2017-07-03T19:16:12.887 に答える