PHPでのプログラミング初心者。日付/時刻の入力形式を確認しようとしています。2012 年 11 月 27 日午後 6 時 '2012-nov-27|6pm' のユーザー入力は次のとおりです。
どこから始めればよいかよくわかりません。助言がありますか?ありがとう。
江南OOP スタイル:
$input = '2012-nov-27|6pm';
$date = \DateTime::createFromFormat('Y-M-j ga', str_replace('|', ' ', $input));
if ($date === false) {
throw new \Exception('Invalid date!');
}
注:|
形式/日付文字列で使用すると問題が発生したため、str_replace()
注 2:入力日の形式が01-31
ではなく の場合、を最初のパラメータ1-31
に置き換えます。j
d
createFromFormat()
date_parse_from_formatのドキュメントについてはこちらを、一般的な日付形式についてはこちらをご覧ください。これを試してください:
<?php
$date = "2012-nov-27|6pm";
print_r(date_parse_from_format("Y-M-d|ga", $date));
?>
試す:
$datetime = "2012-nov-27|6pm";
$unixtime = strtotime( $datetime );
if( is_numeric($unixtime) && $unixtime <= PHP_INT_MAX ) {
//do something if true
} else {
echo "Invalid DateTime";
}
日付の有効性をテストするだけの場合は、次のようにします。入力形式をテストするだけの場合でも、データの健全性もチェックすることをお勧めします。
$thedate = "2012-nov-27|6pm";
$arryParts = explode("|", $thedate);
$arryDate = date_parse($arryParts[0]);
if(!checkdate($arryDate['month'], $arryDate['day'], $arryDate['year'])) {
/* error handling */
}
/* valid date, continue processing */
checkdateを使用できます:
if(checkdate($month, $day, $year)){
echo 'Valid date!';
}
または、ユーザーが入力したものを strtotime() で変換できます。strtotime が日付を判別できない場合、bool false を返します。
if(strtotime($dateEntered) !== false){
echo 'Valid date!';
}
形式を確認したいだけの場合は、正規表現を使用します。
$months = 'jan|feb|mar|apr|may|jun|jul|aug|sep|okt|nov|dec';
$pattern = '/([0-9]{4})-('.$months.')-([0-9]{2})\\|([0-9]?[0-9])(am|pm)/';
preg_match($pattern, $input, $matches);
var_dump($matches);
特定の日付/時刻が存在するかどうかを本当に確認したい場合は、さらに複雑になります。私は間違っているかもしれませんが、PHP の日付関数は入力エラーに対して非常に寛容であるため、これを使用して実行できるとは思いません。たぶん、これを行うためのライブラリがあります。