Front page | perl.datetime | Postings from March 2017

## Re: Recurring set does not correctly calculate dates for secondFriday of the month.

From:
Zefram
Date:
March 2, 2017 04:18
Subject:
Re: Recurring set does not correctly calculate dates for secondFriday of the month.
Message ID:
20170302040050.GS6573@fysh.org
```Andrew Martin wrote:
>however 17-02-2017 is the Third Friday, the expected result is 10-02-2017

DateTime::Event::Recurrence->monthly doesn't really do "the Nth Fooday
of each month".  It gives you either "the Fooday of the Nth week that
is mostly contained in each month" or "the Fooday of the Nth week that
started in each month".  Its idea of a week always starts on a specified
day of the week; the first week that is mostly contained in a month may
start on any day from three days before the 1st of the month up to the
4th of the month.

You *can* use this to get the Nth Fooday of each month, by manipulating
how the weeks are delimited.  Observe that each week is mostly contained
in the month that contains its fourth day.  If you're only interested
in which month contains a specific day of the week, you just have to
arrange for that day to be the fourth of the week.  So to get the Nth
Friday of each month, you need to tell it that the week starts on Tuesday:

my \$set = DateTime::Event::Recurrence->monthly(weeks => 2,
days => "fr", week_start_day => "tu");

Or you can use weeks starting in the month, and tell it that the day
you're interested in is the first day of the week:

my \$set = DateTime::Event::Recurrence->monthly(weeks => 2,
days => "fr", week_start_day => "1fr");

The example in the module's documentation labelled "second tuesday of
every month" is incorrect.  It actually yields Tuesdays ranging from the
9th to the 15th of each month, because it is computing the Tuesdays of
the second week to start in each month, with the week starting on Monday.

-zefram

```