///////// 「春分の日&秋分の日 ハッピーマンデー その他」関数群 ///////// by 大盛林らいす氏 ///使い方の例 ///RandomTalk : nonoverlap ///{ /// "2004年の成人の日は " + 成人の日(2004,"yyyy年MM月dd日(E)") + " です。\e" /// "今年の春分の日は " + 春分の日(year,"E") + "曜日 です。\e" /// "2004年の秋分の日は " + 秋分の日(2004) + " です。\e" /// "あなたの誕生日は " + 年月日書式(197*,2,14,"E") + "曜日 でした。\e" /// "あなたが過ごした人生は " + 通算日(197*,2,14,year,month,day) + "日間 です。\e" ///} 曜日 { _曜日 = "日,月,火,水,木,金,土" _weekday = weekday if _argc > 0 { _weekday = _argv[0] % 7 if _weekday < 0 { _weekday += 7 } } _曜日[_weekday] } 春分の日 { _年 = year _月 = 3 _日 = 22 _年配列 = "1900,1924,1960,1992,2024,2056,2092" _書式 = "yyyy/MM/dd" if _argc > 0 { _年 = _argv[0] if _argc > 1 { _書式 = _argv[1] } } for _n = ARRAYSIZE(_年配列); _n > 0; _n-- { _m = _n - 1 if _年 >= TOINT(_年配列[_m]) { _日 -= (_m - _年 % 4 + 6) / 4 break } } 年月日書式(_年,_月,_日,_書式) } 秋分の日 { _年 = year _月 = 9 _日 = 24 _年配列 = "1900,1920,1948,1980,2012,2044,2076" _書式 = "yyyy/MM/dd" if _argc > 0 { _年 = _argv[0] if _argc > 1 { _書式 = _argv[1] } } for _n = ARRAYSIZE(_年配列); _n > 0; _n-- { _m = _n - 1 if _年 >= TOINT(_年配列[_m]) { _日 -= (_m - _年 % 4 + 4) / 4 break } } 年月日書式(_年,_月,_日,_書式) } 成人の日 { _年 = year _書式 = "yyyy/MM/dd" if _argc > 0 { _年 = _argv[0] if _argc > 1 { _書式 = _argv[1] } } 第n曜日(_年,1,2,1,_書式) } 海の日 { _年 = year _書式 = "yyyy/MM/dd" if _argc > 0 { _年 = _argv[0] if _argc > 1 { _書式 = _argv[1] } } 第n曜日(_年,7,3,1,_書式) } 敬老の日 { _年 = year _書式 = "yyyy/MM/dd" if _argc > 0 { _年 = _argv[0] if _argc > 1 { _書式 = _argv[1] } } 第n曜日(_年,9,3,1,_書式) } 体育の日 { _年 = year _書式 = "yyyy/MM/dd" if _argc > 0 { _年 = _argv[0] if _argc > 1 { _書式 = _argv[1] } } 第n曜日(_年,10,2,1,_書式) } //以下、第n曜日計算など 第n曜日 { _年 = _argv[0] _月 = _argv[1] _週 = _argv[2] _日 = _argv[3] _書式 = _argv[4] _前月 = _月 - 1 _月末曜日 = 月末曜日(_年,_前月) _通算日 = _日 - TOINT(_月末曜日) if _日 <= _月末曜日 { _通算日 += _週 * 7 } else { _通算日 += (_週 -1) * 7 } 年月日書式(_年,_月,_通算日,_書式) } 月末曜日 { _対象年 = _argv[0] _対象月 = _argv[1] _境界年 = 1980 _通算日 = 1 if _対象年 < _境界年 { _境界前年 = _境界年 - 1 for _y = _境界前年; _y > _対象年; _y-- { _通算日 -= TOINT(年間日(_y)) } _月間日 = 月間日(_対象年) _対象前月 = _対象月 - 1 for _m = 11; _m > _対象前月; _m-- { _通算日 -= TOINT(_月間日[_m]) } } else { for _y = _境界年; _y < _対象年; _y++ { _通算日 += TOINT(年間日(_y)) } _月間日 = 月間日(_対象年) for _m = 0; _m < _対象月; _m++ { _通算日 += TOINT(_月間日[_m]) } } _通算日 % 7 } 年間日 { _年間日 = 0 _月間日 = 月間日(_argv[0]) for _m = 0; _m < 12; _m++ { _年間日 += TOINT(_月間日[_m]) } _年間日 } 通算日 { _開始年 = _argv[0] _開始月 = _argv[1] _開始日 = _argv[2] _終了年 = _argv[3] _終了月 = _argv[4] _終了日 = _argv[5] _通算日 = 1 for _y = _開始年; _y < _終了年; _y++ { _通算日 += TOINT(年間日(_y)) } _月間日 = 月間日(_終了年) for _m = 0; _m < _終了月; _m++ { _通算日 += TOINT(_月間日[_m]) } _通算日 += _終了日 _月間日 = 月間日(_開始年) for _m = 0; _m < _開始月; _m++ { _通算日 -= TOINT(_月間日[_m]) } _通算日 -= _開始日 _通算日 } 月間日 { _月間日 = "31,28,31,30,31,30,31,31,30,31,30,31" _対象年 = _argv[0] _y = _対象年 % 4 if _y == 0 { _y = _対象年 % 100 if _y == 0 { _y = _対象年 % 400 if _y == 0 { _月間日 = "31,29,31,30,31,30,31,31,30,31,30,31" } } else { _月間日 = "31,29,31,30,31,30,31,31,30,31,30,31" } } _月間日 } 年月日書式 { _書式 = "yyyy/MM/dd" if _argc > 3 { _書式 = _argv[3] } _年 = 0埋め(_argv[0],4) _年書式 = REPLACE(_書式,"yyyy",_年) _月 = 0埋め(_argv[1],2) _月書式 = REPLACE(_年書式,"MM",_月) _日 = 0埋め(_argv[2],2) _日書式 = REPLACE(_月書式,"dd",_日) _前月 = _argv[1] - 1 _月末曜日 = 月末曜日(_argv[0],_前月) _曜日 = TOINT(_月末曜日) + _argv[2] _曜日書式 = REPLACE(_日書式,"E",曜日(_曜日)) _曜日書式 } 0埋め { _実桁 = LOG10(_argv[0]) +1 _総桁 = _argv[1] _0埋め = "" for _n = _実桁; _n < _総桁; _n++ { _0埋め += "0" } _0埋め += TOSTR(_argv[0]) _0埋め }