[
板情報
|
カテゴリランキング
]
したらばTOP
■掲示板に戻る■
全部
1-100
最新50
|
1-
101-
201-
301-
この機能を使うにはJavaScriptを有効にしてください
|
プログラムスレッド
304
:
女傑
◆k/y1YZqW2w
:2025/07/19(土) 18:39:21
あなたのPerl CGIスクリプトに対して、以下の2つの追加処理を加えます:
1. **「国民の休日」**対応:祝日と祝日に挟まれた平日も休日とみなす
2. 六曜の表示:既に $rokki として表示されていますが、is_holiday() に組み込みます
---
🛠️ 修正方針
is_holiday($y, $m, $d) というサブルーチンを定義し、祝日・国民の休日かどうかを判定します。
現在の $yobi 判定処理(定義日と春分・秋分)を関数化し、中央集約。
$yesterday と $tomorrow を使って「国民の休日」かどうかを判断。
qreki::get_rokuyou の結果(六曜)も返します。
以下のコードをスクリプト末尾に 追記してください(sub wday の後あたり):
sub is_holiday {
my ($y, $m, $d) = @_;
my $ds = Date::Simple->new($y, $m, $d);
# 六曜
my $rokuyou_num = &qreki'get_rokuyou($y, $m, $d);
my @rokuyou_names = ("大安", "赤口", "先勝", "友引", "先負", "仏滅");
my $rokuyou = $rokuyou_names[$rokuyou_num];
# 祝日名(元日など)取得(あなたの既存コードを再利用)
my $name = "";
my $z = $d; # 通常はそのまま使うが、可変祝日では計算あり
my $wday = wday($y, $m, $d);
if ($m == 1 && $d == 1) { $name = "元日"; }
elsif ($m == 2 && $d == 11 && $y >= 1967) { $name = "建国記念日"; }
elsif ($m == 4 && $d == 29) {
if ($y <= 1988) { $name = "天皇誕生日"; }
elsif ($y >= 2007) { $name = "昭和の日"; }
else { $name = "みどりの日"; }
}
elsif ($m == 5 && $d == 3) { $name = "憲法記念日"; }
elsif ($m == 5 && $d == 4 && $y >= 2007) { $name = "みどりの日"; }
elsif ($m == 5 && $d == 5) { $name = "こどもの日"; }
elsif ($m == 11 && $d == 3) { $name = "文化の日"; }
elsif ($m == 11 && $d == 23) { $name = "勤労感謝の日"; }
elsif ($m == 12 && $d == 23 && $y >= 1989 && $y <= 2018) { $name = "天皇誕生日"; }
# 可動祝日(ハッピーマンデー)
if ($y >= 2000 && $m == 1 && $wday == 1 && $d >= 8 && $d <= 14) { $name = "成人の日"; }
if ($y >= 2003 && $m == 7 && $wday == 1 && $d >= 15 && $d <= 21) { $name = "海の日"; }
if ($y >= 2003 && $m == 9 && $wday == 1 && $d >= 15 && $d <= 21) { $name = "敬老の日"; }
if ($y >= 2000 && $m == 10 && $wday == 1 && $d >= 8 && $d <= 14) { $name = "体育の日"; }
# 春分・秋分の日(qreki.pl から)
my $sekki = &qreki'check_24sekki($y, $m, $d);
if ($sekki =~ /春分/) { $name = "春分の日"; }
elsif ($sekki =~ /秋分/) { $name = "秋分の日"; }
# 「国民の休日」判定:前後が祝日で自分が平日
unless ($name) {
my $prev = $ds->prev;
my $next = $ds->next;
my ($py, $pm, $pd) = split(/-/, $prev);
my ($ny, $nm, $nd) = split(/-/, $next);
my ($pname, undef) = is_holiday($py, $pm, $pd);
my ($nname, undef) = is_holiday($ny, $nm, $nd);
if ($pname && $nname && $wday != 0 && $wday != 6) {
$name = "国民の休日";
}
}
return ($name, $rokuyou);
}
今の $yobi や $rokki を以下に 置き換えてください:
($yobi, $rokki) = is_holiday($year, $month, $day);
そして、前後日の六曜や二十四節気を出している部分にも同様に:
my ($yobi_before, $rokki_before) = is_holiday($yesterdaysnen, $yesterdaystuki, $yesterdayshi);
my ($yobi_after, $rokki_after) = is_holiday($tomorrows[0], $tomorrows[1], $tomorrows[2]);
表示部に $rokki を利用していればそのままでOKです。
新着レスの表示
名前:
E-mail
(省略可)
:
※書き込む際の注意事項は
こちら
※画像アップローダーは
こちら
(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板