php/add months to DateTime返回错误日期

php/add months to DateTime返回错误日期,php,datetime,Php,Datetime,此代码的奇怪行为: var_dump((new \DateTime())->createFromFormat("j-M-Y", "30-Nov-2015")->add(new \DateInterval('P3M'))); 会回来的 class DateTime#2 (3) { public $date => string(19) "2016-03-01 15:13:32" public $timezone_type => int(3) public

此代码的奇怪行为:

var_dump((new \DateTime())->createFromFormat("j-M-Y", "30-Nov-2015")->add(new \DateInterval('P3M')));
会回来的

class DateTime#2 (3) {
  public $date =>
  string(19) "2016-03-01 15:13:32"
  public $timezone_type =>
  int(3)
  public $timezone =>
  string(14) "Africa/Algiers"
}
而不是预期的

class DateTime#2 (3) {
  public $date =>
  string(19) "2016-02-29 15:13:32"
  public $timezone_type =>
  int(3)
  public $timezone =>
  string(14) "Africa/Algiers"
}
有什么想法吗?

举个例子

var_dump((new \DateTime())->createFromFormat("j-M-Y", "30-Nov-2015")->add(new \DateInterval('P3M')));
不能将其视为“每月最后一天增加3个月”,而是“每月第30天增加3个月”。由于2016年2月的天数是29天而不是28天,因此该月1日后的30天是3月1日。同样,请注意

var_dump((new \DateTime())->createFromFormat("j-M-Y", "30-Nov-2015")->add(new \DateInterval('P2M')));
在1月30日而不是31日登陆。

示例

var_dump((new \DateTime())->createFromFormat("j-M-Y", "30-Nov-2015")->add(new \DateInterval('P3M')));
不能将其视为“每月最后一天增加3个月”,而是“每月第30天增加3个月”。由于2016年2月的天数是29天而不是28天,因此该月1日后的30天是3月1日。同样,请注意

var_dump((new \DateTime())->createFromFormat("j-M-Y", "30-Nov-2015")->add(new \DateInterval('P2M')));

登陆日期是1月30日,而不是31日。

这是我所期望的结果。这个问题无法回答,因为你期望它根据你的武断规则所做的事情与语言的规则相冲突,大多数人都希望它能起作用。因此,除非你能/想重新表述你的问题,否则我看不出这是怎么回答的。这是我所期望的结果。这个问题无法回答,因为你期望它根据你的武断规则所做的事情与语言的工作规则相冲突,大多数人都期望它工作。因此,除非你能/想重新表述你的问题,否则我看不出这怎么可能得到回答。