2つの日付(開始と終了)をDBに追加するPHPスクリプトに渡すフォームがあります。これの検証に問題があります。次のエラーが発生し続けます
非整形式の数値が検出された
これは私が次を使用するときです
date("d",$_GET['start_date']);
しかし、多くのサイトで推奨されているようにstrtotime()関数を使用すると、1970年1月1日のUNIXタイムスタンプが取得されます。正しい日付を取得する方法はありますか?
日付関数の2番目の引数として文字列を渡しているため、整数である必要があります。
文字列日付(string $ format [、int $ timestamp = time()])
strtotime を試してみてください、英語のテキストによる日時の説明をUnixタイムスタンプに解析します(整数):
date("d", strtotime($_GET['start_date']));
strtotime()
関数を使用してこの問題を解決できます。
date("d",strtotime($_GET['start_date']));
私はこの同じ状況に遭遇しました(私の場合、PHPビューのカスタムDrupalフィールドに日付値があります)、そして私のために働いたのはstrtotimeではなくintvalを使用して整数への値-基本的にタイムスタンプであるが、整数ではなく文字列の形式であるため。明らかにそれはすべての人には当てはまりませんが、試してみる価値があるかもしれません。
これは私を大いに助けてくれました-
$new_date = date_format(date_create($old_date), 'Y-m-d');
これは古い質問ですが、このメッセージが発生する別の微妙な方法があります。それはかなりよく説明されています ここでは、ドキュメントで 。
このシーンを想像してください:
try {
// code that triggers a pdo exception
} catch (Exception $e) {
throw new MyCustomExceptionHandler($e);
}
そして、MyCustomExceptionHandler
はおおよそ次のように定義されます:
class MyCustomExceptionHandler extends Exception {
public function __construct($e) {
parent::__construct($e->getMessage(), $e->getCode());
}
}
Exception
クラスはコンストラクターの2番目のパラメーターの数値を予期しているため、これは実際にカスタム例外ハンドラーで新しい例外をトリガーしますが、PDOException
は$e->getCode()
の戻り値の型を文字列に動的に変更した可能性があります。
これを回避するには、次のようなカスタム例外ハンドラを定義します。
class MyCustomExceptionHandler extends Exception {
public function __construct($e) {
parent::__construct($e->getMessage());
$this->code = $e->getCode();
}
}
計算時にエラーが発生した場合は、値にコンマ(、)が含まれていないことを再確認してください。値は整数/浮動小数点形式のみである必要があります。
Date_default_timezone_set()を使用してタイムゾーンを設定する必要があります。
文字列に数字のみが含まれている場合、文字列を渡すことは必ずしも問題ではありません。
これが発生する可能性があるもう1つの理由は、前後にスペースがある場合です。例えば。 "1557399276"