在角色 Dateish 中§

有关方法 earlier,请参阅主要文档 in context

multi method earlier(Dateish:D: *%unit)
multi method earlier(Dateish:D: @pairs)

返回一个基于当前对象的对象,但应用了朝向过去的日期增量。除非给定的单位是secondseconds,否则给定的值将被转换为 Int。有关用法,请参阅 .later。它通常将通过实现此角色的类(DateDateTime)使用。

my $d = Date.new('2015-02-27');
say $d.earlier(month => 5).earlier(:2days);  # OUTPUT: «2014-09-25␤» 
my $d = DateTime.new(date => Date.new('2015-02-27'));
say $d.earlier(month => 1).earlier(:2days);  # OUTPUT: «2015-01-25T00:00:00Z␤»

如果结果时间秒值为60,但实际上没有闰秒,则秒将设置为59

say DateTime.new('2008-12-31T23:59:60Z').earlier: :1day;
# OUTPUT: «2008-12-30T23:59:59Z␤»

允许负偏移,但 later 是更习惯的用法。

如果您需要使用多个单位,则需要将它们构建到 ListPair 中,以使用该方法的第二种形式

say Date.new('2021-03-31').earlier(  ( year => 3month => 2day => 8 ) ); # OUTPUT: «2018-01-23␤» 

此功能在 Rakudo 编译器的 2021.02 版本中引入。