我必须在日期中转换DayOfYear值。
我在2016年的第70天尝试了跟进:
php -r 'var_dump(DateTime::createFromFormat("z Y","69 2016"));'
class DateTime#1 (3) { public $date => string(26) "2016-03-11 14:21:07.000000" public $timezone_type => int(3) public $timezone => string(3) "UTC" }
(' z'是基于空的)
但那是错的。应该是2016-03-10!
是PHP-Bug吗?
答案 0 :(得分:5)
它看起来像一个bug。 (正如@aioros在评论中评论的那样,它是bug #62476。)
但是,如果您在一年的第一天创建DateTime
对象,然后添加所需的天数,则可以绕过它:
$date =
DateTime::createFromFormat("z Y","0 2016", new DateTimeZone("UTC"))
->add(new DateInterval("P69D"))
;
var_dump($date);
显示:
class DateTime#2 (3) {
public $date =>
string(26) "2016-03-10 14:46:37.000000"
public $timezone_type =>
int(3)
public $timezone =>
string(3) "UTC"
}
<强>更新强>
PHP bug #62476评论中建议的另一种解决方法是将年份放在第一位:
DateTime::createFromFormat("Y z","2016 69");
这种方式可以按预期工作。