PHPコーディング

日時形式チェック

2008年09月04日
PHPで日時のフォーマット形式をチェックする方法をネットで探したら、いくつか見つかりました。

その中の1つをアレンジして、

function chkDateTime($date_time){
 //YYYY-MM-DD HH:mm:ss
 if(isset($date_time) && (trim($date_time) != '')) {
  if(!preg_match('/^(\d\d\d\d)\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)$/', $date_time, $dates)) {
   return false;
  }
  else{
   if(!mktime($dates[4], $dates[5], $dates[6], $dates[1], $dates[2], $dates[3])) {
    return false;
   }
  }
 }
 return true;
}

という関数を作って、実行してみました。


ところが、不正な日時を入力しても通ってしまいます。調べていくと、【mktime】関数が思った動きをしていません。
ありえない日時を入力しても、修正して値を返してくれています。かしこい・・・


そこで、日付については、【checkdate】関数を使うことにしました。
checkdate($dates[2], $dates[3], $dates[1]);

時刻についても、関数を調べたのですが、適当な関数がないようです。で、泣く泣く(オーバー)自分で作りました。
時間は0以上23以下、分と秒は0以上59以下をチェックします。


合わせると、こんな関数になりました。

function chkDateTime($date_time){
 //YYYY-MM-DD HH:mm:ss
 if(isset($date_time) && (trim($date_time) != '')) {
  if(!preg_match('/^(\d\d\d\d)\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)$/', $date_time, $dates)) {
   return false;
  }
  else{
   if(!checkdate($dates[2], $dates[3], $dates[1])){
    return false;
   }
  
   if((0 <= $dates[4]) && ($dates[4] <= 23)){
   }
   else{
    return false;
   }
   
   if((0 <= $dates[5]) && ($dates[5] <= 59)){
   }
   else{
    return false;
   }
  
   if((0 <= $dates[6]) && ($dates[6] <= 59)){
   }
   else{
    return false;
   }
  }
 }
 return true;
}


コール側で、YYYY-MM-DD HH:mm:ss形式にして、コールします。日付の区切り文字【-】が【/】の場合、変換をかけてからコールします。


もっとスマートなやり方がある気がするのですが・・・ 見つかりませんでした。とりあえず動いているようです。
2008年09月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
先月
来月
カテゴリ
検索
関連サイト
プロフィール
【ネットネーム】
みゅー

キャラクター by ツカエルサイト


【趣味】
・プログラミング
・写真
・楽器演奏
・手芸
・日曜大工
・家の中の不便を便利に
・考える
・自然科学
・猫と戯れる
・ジグソーパズル

【仕事】
・派遣社員でSE・PGやっていました。次の良い仕事がみつからないので、ビジネスへ注力しようと思っています。
・経験言語:VB6、VB.NET、PHP、Perl、JAVA、Oracle、SQLServer、PostgreSQL



【名前】
アン(足)

2014年4月22日生まれ 女の子
あだ名は くノ一
普段は普通にしゃべりますが、興奮すると『ニャ』を連発します

【趣味】
・狩
・ご飯を食べる
・ママのお手伝い

【仕事】
ママのビジネスの看板招き猫
ママの代わりにPC入力
仕事中のママの右腕を温める
ママに心配をかける
いろんな事をしでかしてママを退屈させない

RSSフィード
Tweet