I wonder why this php code gives incorrect output value.
dd(new \DateTime("1397/02/29", new \DateTimeZone('Asia/Tehran')));
It outputs below object:
DateTime @-18076965944 {#1256 ▼
date: 1397-03-01 00:00:00.0 Asia/Tehran (+03:25)
}
As you see the date is incorrect and must be 1397-02-01
.
The output for values 1397/02/30 && 1397/02/31
is incorrect also.
Can anyone help please. thanks.
PHP store date object internal as struct https://github.com/php/php-src/blob/master/ext/date/php_date.h#L137 https://github.com/php/php-src/blob/master/ext/date/lib/timelib.h#L204
But DateTime init have no validating and only converts given date string to timestamp. https://github.com/php/php-src/blob/master/ext/date/php_date.c#L2647
Before creating date object you should check it using http://php.net/manual/en/function.checkdate.php
var_dump(
checkdate(2,20,1000), // bool(true)
checkdate(2,30,1000) // bool(false)
);