LoginSignup
2
0

More than 5 years have passed since last update.

[perl] 日本の祝日と振替休日を避けて締め日と支払日を算出するモジュール作った

Last updated at Posted at 2019-01-23

個人と企業とのやり取りの中で「何日締めの翌月何日払い」みたいなのを計算できるモジュール作りました。
もちろん「10日締めの月末払い」も計算できますし、土日祝を自動判定して休日なら翌営業日にずらす判定も行います。

正直、なんでこんなモジュールが存在しないんだ?って思いました。
どの企業もこの辺ゴリゴリ自作のサブルーチンこさえてるんでしょうか?

SYNOPSIS

use Date::CutOff::JP;
my $dco = Date::CutOff::JP->new({ cutoff => 0, late => 1, payday => 0 });
my %calculated = $dco->calc_date('2019-01-01');
print $calculated{'cutoff'}; # '2019-01-31'
print $calculated{'payday'}; # '2019-02-28'

問題点

依存するモジュールを差し替えて対応済みです。
日本の祝日への対応はすでにあるモジュールに依存しました。
その関係で最新の祝日(山の日と今年5月の天皇即位の日)に対応できてません。
レポジトリが見当たりませんが、perlライセンスなので勝手にフォークしてGitHubに修正バージョンをあげようかと思うのですが、そういう時ってみなさんどうしてます?
一応ご覧になるかどうかわかりませんけど、GitHubにあげてください!ってメールはしてみましたが…

ソース等はGitHubをご確認ください。
誰か適切なテスト書いてくれ〜。

参考

Calendar::Japanese::Holiday 0.05 を扱う上での注意点

本件はメールで作者に報告して前向きな回答をいただきました1が、修正されるまで下記のように注意する必要があります。

use Calendar::Japanese::Holiday;
my $date = "2019-02-11";
my ($y, $m, $d ) = split "-", $date;
return isHoliday( $y, $m, $d, 1 );

のように使うと、$y,$m,$dが文字コンテキストの数字( '2019', '02', '11' )となりundefを返します。

 return isHoliday( $y, 0+$m, 0+$d, 1 );

とすることで回避できました


  1. 本日、0.06にて修正されました。 

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0