2

我正在使用Joda Time 库从 LocalDate 中减去一个月:

LocalDate date = new LocalDate(2013, 3, 31);
System.out.println(date.minusMonths(1));

结果是 2013 年 2 月 28 日,这是我直观地期望的结果,也记录在API中:

如果减去月份使月份中的某日无效,则将其调整为该月的最后一个有效日期。

但是,在我当前的项目中,我需要与一些现有的 PHP 代码兼容,如下所示:

$date = new \DateTime('2013-03-31');
echo $date->sub(new \DateInterval('P1M'))->format('Y-m-d');

这里的结果是 2013-03-03,即“滚动”到下个月。

如何使用 Joda Time 实现相同的行为?

4

1 回答 1

1

PHP seems to subtract the number of days it finds in the previous month. This should do it with Joda:

LocalDate date = new LocalDate(2013, 3, 31);
int numberOfDays = date.minusMonths(1).dayOfMonth().getMaximumValue();
System.out.println(date.minusDays(numberOfDays));
于 2013-04-16T14:14:54.283 回答