我只是有同样的问题。我的解决方案对我来说似乎相当笨拙,但它确实有效。很可能有一个更简单的方法。
$addMonths := function($dateString, $addMonths) {(
$date := $dateString ~> $toMillis();
$newYear := ($date ~> $fromMillis("[Y,4]") ~> $number());
$newMonth := ($date ~> $fromMillis("[M]") ~> $number()) + $addMonths;
$newDay := ($date ~> $fromMillis("[D]") ~> $number());
$newMonth > 12
? $newYear := $newYear + 1;
$newMonth > 12
? $newMonth := $newMonth - 12;
$lastDay := (
$newMonth in [1,3,5,7,8,10,12]
? 31
: $newMonth in [4,6,9,11]
? 30
: ( $newYear%4=0
and
($newYear%100 != 0 or $newYear%400 = 0)
? 29
: 28)
);
$newDay > $lastDay
? $newDay := $lastDay;
( $newYear
& "-"
& $newMonth
& "-"
& $newDay
) ~> $toMillis("[Y]-[M]-[D]")
~> $fromMillis()
)};