Perl6でプレミアムフライデーを求める

世の中では月の最終金曜日をプレミアムフライデーと呼ぶそうですね(目をそらしながら)

Perl6 でそのプレミアムフライデーを求めてみたいと思います。

## ソース

Perl6 の Date や DateTime には最終◯曜日を求めるメソッドは無かった筈なので一手間必要です。

```ruby:pf.pl6
# 金曜日は5
my Int $friday := 5;

# 2017年02月からスタート
my DateTime $d .= new( :2017year :2month :1day :15hour :0minute :0second );

# 100ヶ月分のプレミアムフライデー
for 0..^100 -> $later {
  # 翌月初の1日前、つまり当月末日
  my DateTime $e = $d.clone.later(month => $later + 1).earlier(day => 1);

  # 当月末日の曜日
  my Int $dow = $e.day-of-week;

  # 金曜日からの差分(日数)
  my Int $diff = ($dow >= $friday) ?? $dow - $friday !!  7 + $dow - $friday;

  # 当月末日から、差分だけ前の日
  say $e.earlier(day => $diff);
}
```

```bash:出力
2017-02-24T15:00:00Z
2017-03-31T15:00:00Z
2017-04-28T15:00:00Z
2017-05-26T15:00:00Z
2017-06-30T15:00:00Z
2017-07-28T15:00:00Z
2017-08-25T15:00:00Z
2017-09-29T15:00:00Z
2017-10-27T15:00:00Z
2017-11-24T15:00:00Z
2017-12-29T15:00:00Z
2018-01-26T15:00:00Z
2018-02-23T15:00:00Z
2018-03-30T15:00:00Z
2018-04-27T15:00:00Z
2018-05-25T15:00:00Z
2018-06-29T15:00:00Z
2018-07-27T15:00:00Z
2018-08-31T15:00:00Z
2018-09-28T15:00:00Z
2018-10-26T15:00:00Z
2018-11-30T15:00:00Z
2018-12-28T15:00:00Z
2019-01-25T15:00:00Z
2019-02-22T15:00:00Z
2019-03-29T15:00:00Z
2019-04-26T15:00:00Z
2019-05-31T15:00:00Z
2019-06-28T15:00:00Z
2019-07-26T15:00:00Z
2019-08-30T15:00:00Z
2019-09-27T15:00:00Z
2019-10-25T15:00:00Z
2019-11-29T15:00:00Z
2019-12-27T15:00:00Z
2020-01-31T15:00:00Z
2020-02-28T15:00:00Z
2020-03-27T15:00:00Z
2020-04-24T15:00:00Z
2020-05-29T15:00:00Z
2020-06-26T15:00:00Z
2020-07-31T15:00:00Z
2020-08-28T15:00:00Z
2020-09-25T15:00:00Z
2020-10-30T15:00:00Z
2020-11-27T15:00:00Z
2020-12-25T15:00:00Z
2021-01-29T15:00:00Z
2021-02-26T15:00:00Z
2021-03-26T15:00:00Z
2021-04-30T15:00:00Z
2021-05-28T15:00:00Z
2021-06-25T15:00:00Z
2021-07-30T15:00:00Z
2021-08-27T15:00:00Z
2021-09-24T15:00:00Z
2021-10-29T15:00:00Z
2021-11-26T15:00:00Z
2021-12-31T15:00:00Z
2022-01-28T15:00:00Z
2022-02-25T15:00:00Z
2022-03-25T15:00:00Z
2022-04-29T15:00:00Z
2022-05-27T15:00:00Z
2022-06-24T15:00:00Z
2022-07-29T15:00:00Z
2022-08-26T15:00:00Z
2022-09-30T15:00:00Z
2022-10-28T15:00:00Z
2022-11-25T15:00:00Z
2022-12-30T15:00:00Z
2023-01-27T15:00:00Z
2023-02-24T15:00:00Z
2023-03-31T15:00:00Z
2023-04-28T15:00:00Z
2023-05-26T15:00:00Z
2023-06-30T15:00:00Z
2023-07-28T15:00:00Z
2023-08-25T15:00:00Z
2023-09-29T15:00:00Z
2023-10-27T15:00:00Z
2023-11-24T15:00:00Z
2023-12-29T15:00:00Z
2024-01-26T15:00:00Z
2024-02-23T15:00:00Z
2024-03-29T15:00:00Z
2024-04-26T15:00:00Z
2024-05-31T15:00:00Z
2024-06-28T15:00:00Z
2024-07-26T15:00:00Z
2024-08-30T15:00:00Z
2024-09-27T15:00:00Z
2024-10-25T15:00:00Z
2024-11-29T15:00:00Z
2024-12-27T15:00:00Z
2025-01-31T15:00:00Z
2025-02-28T15:00:00Z
2025-03-28T15:00:00Z
2025-04-25T15:00:00Z
2025-05-30T15:00:00Z
```

## あわせて読みたい

| 言語 | リンク |
|:-----|:-----|
| Bash | [毎月最終金曜（プレミアムフライデー）だったら実行するシェルスクリプト - Qiita](http://qiita.com/Qrg/items/fd305ba60f93a97c4480) |
| PHP | [PHPを使って今日または次のプレミアムフレイデーを4行で取得する - Qiita](http://qiita.com/mpyw/items/69dd45874fd03fa2102e) |
| PHP | [PHPでプレミアムフライデー（月末の金曜日）を求める - Qiita](http://qiita.com/limithand/items/7d96caa9c30743cb3132) |
| Oracle DB | [NEXT_DAY関数、TRUNC関数を使って、向こう1000日分のプレミアムフライデーを求めてみる。(Oracle Database) - Qiita](http://qiita.com/ora_gonsuke777/items/a4e7c1d5e4c5c7a462c3) |
| Java | [プレミアムフライデーを求めるメソッドを作ろうと思ったらJava8の標準APIに既にあった - Qiita](http://qiita.com/opengl-8080/items/a6104a3e5dba7b562b66) |
| Java | [プレミアムフライデーを求めるメソッドを作った（Java8版） - Qiita](http://qiita.com/deaf_tadashi/items/963a62072338f09f12a5) |
| Java | [プレミアムフライデーを求めるメソッドを作った - Qiita](http://qiita.com/neko_the_shadow/items/4ebf94a8a6d9282e7207) |
| Java | [プレミアムフライデーを求めるメソッドをワンライナーで作った - Qiita](http://qiita.com/Takmiy/items/86242718633a0cb58add) |
| PowerShell | [プレミアムフライデーを求める処理を作った - Qiita](http://qiita.com/akrmsd/items/d4523275b38916ffe964) |
| Kotlin | [プレミアムフライデーを求める記述をKotlinで書いてみた - Qiita](http://qiita.com/deaf_tadashi/items/8e4b3f0bfb50242fad76) |
| Python | [Pythonで2017年のプレミアムフライデー一覧を出力する - Qiita](http://qiita.com/v_bit/items/1fe6bbacb7e17fe92ebc) |
| Ruby | [プレミアムフライデーに備えよう！Railsで次の月末の金曜日を取得する！ - Qiita](http://qiita.com/yukihariguchi/items/1f72191c9d317668add3) |
| JavaScript | [JavaScriptでプレミアムフライデー（月末最終金曜日）の日付を取得してみた - Qiita](http://qiita.com/pinoxox/items/dab127176d1f19936699) |
| DB2 | [DB2DBA: DB2の日付操作でプレミアムフライデー判定 - Qiita](http://qiita.com/SVC34/items/0b3681216af0d8a3ff15) |

## おわり

おわりです:whale2:


## 参考と注釈
* [class DateTime](https://docs.perl6.org/type/DateTime)
* [速習Perl6の日付型 - Qiita](http://qiita.com/B73W56H84/items/0288c255df5e474dc378)