Вербное воскресенье - воскресенье перед пасхальным воскресеньем. Найти пасхальное воскресенье можно с помощью:
use Time::Moment;
use Time::Moment::Adjusters qw(WesternEasterSunday PreviousDayOfWeek);
# 2018-04-01T00:00:00Z
my $easter_sunday = Time::Moment->new(year => 2018)->with(WesternEasterSunday);
Поиск воскресенья до того, как это может быть достигнуто с помощью Time::Moment::Adjusters
'PreviousDayOfWeek(7)
:
$adjuster = PreviousDayOfWeek($day);
$adjuster
устанавливает дату в соответствии с предыдущим вхождением данного дня недели [1 = понедельник, 7 = воскресенье] перед датой.
Но если я применю этот регулятор, я получу вторник на пять дней раньше!
# 2018-03-27T00:00:00Z
my $palm_sunday = $easter_sunday->with(PreviousDayOfWeek(7))
Поскольку Вербное воскресенье всегда остается за семь дней до Пасхального воскресенья, я мог бы добиться этого с помощью Time::Moment
'minus_days(7)
, но, поскольку я хочу найти ряд других праздников, которые намного проще чтобы найти с помощью Time::Moment::Adjusters
, я действительно хотел бы найти корень этого неожиданного поведения.