3

PHPでのプログラミング初心者。日付/時刻の入力形式を確認しようとしています。2012 年 11 月 27 日午後 6 時 '2012-nov-27|6pm' のユーザー入力は次のとおりです。

どこから始めればよいかよくわかりません。助言がありますか?ありがとう。

4

6 に答える 6

1

江南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に置き換えます。jdcreateFromFormat()

于 2012-11-08T16:12:35.017 に答える
1

date_parse_from_formatのドキュメントについてはこちらを、一般的な日付形式についてはこちらをご覧ください。これを試してください:

<?php
$date = "2012-nov-27|6pm";
print_r(date_parse_from_format("Y-M-d|ga", $date));
?>
于 2012-11-08T15:54:13.933 に答える
0

試す:

$datetime = "2012-nov-27|6pm";
$unixtime = strtotime( $datetime );
if( is_numeric($unixtime) && $unixtime <= PHP_INT_MAX ) {
  //do something if true
 } else {
    echo "Invalid DateTime";
 }

デモ

于 2012-11-08T15:55:27.097 に答える
0

日付の有効性をテストするだけの場合は、次のようにします。入力形式をテストするだけの場合でも、データの健全性もチェックすることをお勧めします。

$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 */
于 2012-11-08T16:12:13.320 に答える
0

checkdateを使用できます:

if(checkdate($month, $day, $year)){
    echo 'Valid date!';
}

または、ユーザーが入力したものを strtotime() で変換できます。strtotime が日付を判別できない場合、bool false を返します。

if(strtotime($dateEntered) !== false){
     echo 'Valid date!';
}
于 2012-11-08T15:52:59.600 に答える
0

形式を確認したいだけの場合は、正規表現を使用します。

$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 の日付関数は入力エラーに対して非常に寛容であるため、これを使用して実行できるとは思いません。たぶん、これを行うためのライブラリがあります。

于 2012-11-08T15:53:46.697 に答える