PHP で、日時のフォーマットをチェックする方法

まず、yyyy/mm/dd HH:nn (秒は省略;00秒とみなす)のフォーマットを表す正規表現は、
^(\d\d)\/(\d\d)\/(\d\d\d\d) (\d\d):(\d\d)$
となる。 preg_match は、Perl 形式のでの正規表現を処理するものであり、以下の例だと $datetime でマッチした順から $m 配列に
$m[1] = 1
$m[2] = 28
$m[3] = 2007
$m[4] = 12
$m[5] = 34
という値が自動的に入る。なので、mktime で $m[1]~$m[5] をひとつひとつ並び替えて再構築して日時を生成してみて、チェックしている。ちなみに mktime のパラメータは mktime(HH, nn, ss, mm, dd, yyyy)。だから /^(\d\d)\/(\d\d)\/(\d\d\d\d) (\d\d):(\d\d)$/ の正規表現から日時を再構築するには、mktime($m[4], $m[5], 0, $m[1], $m[2], $m[3]); となる。
<?php

$datetime
= '01/28/2007 12:34';

if (isset(
$datetime) && (trim($datetime) != '')) {
 
// check the date format
 
if (!preg_match('/^(\d\d)\/(\d\d)\/(\d\d\d\d) (\d\d):(\d\d)$/', $datetime, $m)) {

  print
'Date and time should be in the format "mm/dd/yyyy HH:nn"';

  } else {

   
// make sure the date provided is a validate date
   
if (!mktime($m[4], $m[5], 0, $m[1], $m[2], $m[3])) {
      print
'Please enter a valid date and time';
    }
  }
}

?>
トラックバック URL: https://perltips.twinkle.cc/trackback/166