PHP的DateTime :: createFromFormat忽略了闰年

And*_*ohl 3 php date

我必须在Date中转换DayOfYear值.

我试过2016年第70天:

php -r 'var_dump(DateTime::createFromFormat("z Y","69 2016"));'
Run Code Online (Sandbox Code Playgroud)
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"
}
Run Code Online (Sandbox Code Playgroud)

('z'是基于空的)

但那是错的.应该是2016-03-10!

它是PHP-Bug吗?

axi*_*iac 5

它看起来像一个bug.(正如@aioros在评论中评论的那样,它是错误#62476.)

但是,如果您DateTime在一年的第一天创建对象然后添加所需的天数,则可以绕过它:

$date = 
    DateTime::createFromFormat("z Y","0 2016", new DateTimeZone("UTC"))
    ->add(new DateInterval("P69D"))
;
var_dump($date);
Run Code Online (Sandbox Code Playgroud)

它显示:

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"
}
Run Code Online (Sandbox Code Playgroud)

更新:

PHP错误#62476的评论中提出的另一个解决方法是将年份放在第一位:

DateTime::createFromFormat("Y z","2016 69");
Run Code Online (Sandbox Code Playgroud)

这种方式可以按预期工作.