php / 将月份添加到日期时间返回错误的日期


php / add months to DateTime returns bad date

关于这段代码的奇怪行为:

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 天,每月第一天后的 30 天是 3 月 1 日。同样,请注意

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

降落在 1 月 30 日而不是 31 日。