LoginSignup
0
1

More than 3 years have passed since last update.

【PHP】DateTimeクラスで 2020/06/31 が通っちゃった!?

Posted at

環境

OS:CentOS 7.7
PHP: 7.1.26

現象

DateTimeクラス のコンストラクタで、日にちが31までなら、
存在しない年月日でも、正常に受け付けるようです(ただし翌月に繰り上がる。)

PHP歴は長いのに知らなかった。じつは常識なのか?

$date = new DateTime( '2020-02-28' ); // OK
$date = new DateTime( '2020-02-29' ); // OK
$date = new DateTime( '2020-02-30' ); // OK
$date = new DateTime( '2020-02-31' ); // OK
$date = new DateTime( '2020-02-32' ); // Error!

$date = new DateTime( '2020-06-30' ); // OK
$date = new DateTime( '2020-06-31' ); // OK
$date = new DateTime( '2020-06-32' ); // Error!

たしかに マニュアル には こっそり下記の説明があります。

// 存在しない値は繰り上がります
$date = new DateTime('2000-02-30');
echo $date->format('Y-m-d H:i:sP') . "\n";
    
2000-03-01 00:00:00-05:00

対策

日付チェックには checkdate() を併用したほうがよさそうです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1