我正在使用Joda Time library从LocalDate中减去一个月:
LocalDate date = new LocalDate(2013, 3, 31);
System.out.println(date.minusMonths(1));
结果是2013-02-28,这是我的直觉期望,也记录在API中:
如果减去月份使月份无效,则将其调整为最后一个有效日期
一个月中的一天。
但是,在我当前的项目中,我需要与以下现有的PHP代码兼容:
$date = new \DateTime('2013-03-31');
echo $date->sub(new \DateInterval('P1M'))->format('Y-m-d');
结果是2013年3月3日,也就是“延期”到下个月。
如何使用Joda Time实现相同的行为?
最佳答案
PHP似乎会减去前一个月的天数。这应该通过Joda完成:
LocalDate date = new LocalDate(2013, 3, 31);
int numberOfDays = date.minusMonths(1).dayOfMonth().getMaximumValue();
System.out.println(date.minusDays(numberOfDays));