web-dev-qa-db-ja.com

整形式でない数値が検出されました

2つの日付(開始と終了)をDBに追加するPHPスクリプトに渡すフォームがあります。これの検証に問題があります。次のエラーが発生し続けます

非整形式の数値が検出された

これは私が次を使用するときです

date("d",$_GET['start_date']);

しかし、多くのサイトで推奨されているようにstrtotime()関数を使用すると、1970年1月1日のUNIXタイムスタンプが取得されます。正しい日付を取得する方法はありますか?

101
Deviland

日付関数の2番目の引数として文字列を渡しているため、整数である必要があります。

文字列日付(string $ format [、int $ timestamp = time()])

strtotime を試してみてください、英語のテキストによる日時の説明をUnixタイムスタンプに解析します(整数):

date("d", strtotime($_GET['start_date']));
194
DChaplin

$_GET['start_date']は数値ではありませんが、日付変数はstrtotimeでサポートされていません。 strtotime の実行可能な形式に日付を再フォーマットするか、 explode / mktime の組み合わせを使用する必要があります。

現在受け取っている形式を投稿するのに十分親切であれば、例を追加できます。

7

strtotime()関数を使用してこの問題を解決できます。

date("d",strtotime($_GET['start_date']));
6
Faisal

私はこの同じ状況に遭遇しました(私の場合、PHPビューのカスタムDrupalフィールドに日付値があります)、そして私のために働いたのはstrtotimeではなくintvalを使用して整数への値-基本的にタイムスタンプであるが、整数ではなく文字列の形式であるため。明らかにそれはすべての人には当てはまりませんが、試してみる価値があるかもしれません。

5
spidersilk

これは私を大いに助けてくれました-

$new_date = date_format(date_create($old_date), 'Y-m-d');
2
Tushar Walzade

これは古い質問ですが、このメッセージが発生する別の微妙な方法があります。それはかなりよく説明されています ここでは、ドキュメントで

このシーンを想像してください:

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();
  }
}
1
Parris Varney

計算時にエラーが発生した場合は、値にコンマ(、)が含まれていないことを再確認してください。値は整数/浮動小数点形式のみである必要があります。

0

Date_default_timezone_set()を使用してタイムゾーンを設定する必要があります。

0
AlanP

文字列に数字のみが含まれている場合、文字列を渡すことは必ずしも問題ではありません。

これが発生する可能性があるもう1つの理由は、前後にスペースがある場合です。例えば。 "1557399276"

0
Nuno