▶ 実 行
▶ 実行
クリア
本気の元号取得!
by 雪乃☆雫
元号取得プラグイン=プラグイン名。 #修正ユリウス日取得 !「https://n3s.nadesi.com/plain/551.nako3」を取り込む。 太陽暦採用を(「1873/01/01」を修正ユリウス日取得)に定める。//明治六年 #和暦データ取得 和暦データURL=「https://n3s.nadesi.com/image.php?f=22.json」。 新旧暦表URL=「https://n3s.nadesi.com/image.php?f=24.json」。 元号一覧は空。旧暦表は空。元号No=空。旧暦No=空。 旧暦表始め=空。旧暦表終り=空。 和暦データURLへAJAX送信した時には、 和暦データ=対象をJSONデコード。 元号一覧=和暦データ["元号一覧"]。 旧暦表=和暦データ["旧暦表"]。 #1873-2099までの旧暦表を追加。 新旧暦表URLへAJAX送信した時には、 新旧暦表=対象をJSONデコード。 #素材としてアップしたものは編集出来ないっぽいので、別途アップしたものをマージする。 旧暦表から((旧暦表の要素数)-1)を配列削除。 旧暦表の(旧暦表の要素数)に新旧暦表を配列一括挿入。 #旧暦表の始めと終わりの日付(旧暦取得の有効範囲)を取得。 旧暦表始め=旧暦表[0]["元日"]の修正ユリウス日取得J。 旧暦表終り=(旧暦表[(旧暦表の要素数)-1]["元日"]の修正ユリウス日取得G)-1。 ここまで。 ここまで。 #元号取得 /* ・大化元年(645/2/2)以降の西暦の日付から、改元日を元に日単位で元号を返す。 ・一応年だけ指定することもできます。その場合は、その年の12/31で取得した元号を返す。(1/1だともれなく元年が出なくなるため) ※ 1872年以前の和暦は旧暦なので、和暦と西暦の年が完全には一致しません。 ・1873~2099までの旧暦にも対応。 旧暦fに「旧暦」を指定すると、太陽暦採用(1873/1/1)以降でも、旧暦としての元号を返す。 (省略や「旧暦」以外の場合は、普通にグレゴリオ暦としての元号を返す) ・南北朝時代の元号並立期間は[南朝,北朝]の配列で返す。 ・元号未制定期間は天皇の年期を代用。そのため、「大化」「白雉」「朱鳥」の開始終了は、例外的に改元日と異なる。 ・「文中」は正確な改元日が不明(4/?)のため仮に4/1として運用。 ・「明治」は立年改元で布告されているため旧1/1から明治元年とする説もあるが「なでしこ3」の和暦変換に合わせ改元日を採用。 ・「平成」は、1989/1/8改元で、新暦では年が明けていますが旧暦では年が明ける前の改元ですが、例外的に年が明けるまでは昭和63年とする。 (旧暦しか無かった時のルールでは、平成元年が19日しか無いことになってしまい、新暦の和暦と元号が合わなくなるため) */ ●(西暦から旧暦fで)元号取得 #西暦をチェックして修正ユリウス日に変換。 西暦は西暦を英数半角変換して、「/」を「/」に置換。 西暦を「/」で区切る。年=それ[0]。 もし、(それの要素数)<3ならば、西暦=「{年}/12/31」。 西暦を『\d{3,4}/\d{1,2}/\d{1,2}』で正規表現マッチ。 もし、それがNULLならば、「【日付が不正です】」で戻る。 対象日=西暦の修正ユリウス日取得。 もし、旧暦表始め>対象日ならば、「【日付が有効範囲外です】」で戻る。 #元号未制定時期 元号未制定時期=「701/05/02」。 元号未制定時期=元号未制定時期の修正ユリウス日取得 #南北朝時代の元号並立期間。 南北朝時代=いいえ。南朝元号年は空。北朝元号年は空。 元号並立期間=["1331/09/11","1394/08/01"]。 元号並立期間=[(元号並立期間[0]の修正ユリウス日取得),(元号並立期間[1]の修正ユリウス日取得)] #改元日では処理できない例外期間の元号の開始日。 もし、対象日≦元号未制定時期ならば、初日=「開始」。 違えば、もし、(元号並立期間[0]≦対象日)かつ(対象日≦元号並立期間[1])ならば、初日=「開始」。 違えば、初日=「西暦」。#西暦改元日 #データの開始終了も修正ユリウス日に変換して、その範囲に指定した西暦が該当するか調べる。 元号一覧を反復 元号=対象["元号"]。元号No=対象キー。開始日=空。 もし、対象[初日]=未定義ならば、続ける。#元号の開始日に指定した項目が空なら明らかに対象外の元号。 開始日=対象[初日]を修正ユリウス日取得。 もし、開始日≦対象日ならば、 もし、元号No=0ならば、対象["西暦"]から元号Noと旧暦fで西暦の和暦年数取得して、元号&それで戻る。 違えば、もし、(元号並立期間[0]≦対象日)かつ(対象日≦元号並立期間[1])ならば、終了=対象["終了"]を修正ユリウス日取得。 違えば、終了=元号一覧[元号No-1][初日]を修正ユリウス日取得。 もし、対象日≦終了ならば #例外期間の処理 もし、(元号並立期間[0]≦対象日)かつ(対象日≦元号並立期間[1])ならば、 改元日=対象["西暦"]。南北=対象["南北朝"]。 違えば、 改元日=対象[初日]。南北=空。 ここまで。 #既に南北朝時代のフラグが立っていた場合南北の元号を配列にして戻す。 もし、南北朝時代=はいならば、 改元日から元号Noと旧暦fで西暦の和暦年数取得。 南朝元号年=元号&それ。 [南朝元号年,北朝元号年]で戻る。 #元号並立期間内ならフラグを立てて続ける。 違えば、もし、(元号並立期間[0]≦対象日)かつ(対象日≦元号並立期間[1])ならば、 改元日から元号Noと旧暦fで西暦の和暦年数取得。 もし、南北=「南北」ならば、元号&それで戻る。 北朝元号年=元号&それ。 南北朝時代=はい。続ける。 #南北朝時代で無ければ普通に元号を返す。 違えば、 改元日から元号Noと旧暦fで西暦の和暦年数取得。 もし、(元号=「平成」)かつ(それ=0)ならば、「昭和63」で戻る。#平成の例外処理 違えば、元号&それで戻る。 ここまで。 ここまで。 ここまで。 ここまで。 「不明」で戻る。 ここまで。 ##改元日からの年数を数える(元号取得の下請け) /* グレゴリオ暦であれば、和暦年の年数は「西暦年-改元日+1」で計算できる。 旧暦の場合は、旧暦の元日がいつかを調べる必要がある(それ以前は前年) */ ●(元号Noと改元日から旧暦fで日付の)和暦年数取得 改元日を「/」で区切る。改元年=それ[0]。 日付を「/」で区切る。年=それ[0]。 対象日=日付の修正ユリウス日取得。 もし、(対象日≧太陽暦採用)かつ(旧暦f≠「旧暦」)ならば、#太陽暦採用後(グレゴリオ暦) 年数=年-改元年+1。 もし、年数=1ならば、「元」で戻る。 違えば、年数で戻る。 違えば、 改元日で旧暦番号検索。元年=それ。 日付で旧暦番号検索。旧暦No=それ。 もし、元号一覧[元号No]@"元号"=「平成」ならば、元年=元年+1。#平成の例外処理 年数=旧暦No-元年+1。 もし、年数=1ならば、「元」で戻る。 違えば、年数で戻る。 ここまで。 ここまで。 #旧暦表から目的の年を検索して番号を得る ●(西暦の|西暦で)旧暦番号検索 西暦を「/」で区切る。対象年=それ[0]。 旧暦表[0]@"元日"を「/」で区切る。検索開始年=それ[0]。 旧暦No=対象年-検索開始年。 #元日より前なら前年。 西暦=西暦の修正ユリウス日取得。 元日とは変数=旧暦表[旧暦No]@"元日"の修正ユリウス日取得。 もし、西暦<元日ならば、旧暦No=旧暦No-1。 旧暦Noで戻る。 ここまで。 ##テスト もし、元号取得プラグイン=「メイン」ならば、 「元号取得テスト」のボタン作成して、元号取得ボタンに代入。 元号取得ボタンをクリックした時には、 「【元号取得】{改行}yyyy/mm/ddで西暦の日付を入力してください。{改行}またはyyyyで西暦年を入力して下さい。」と尋ねる。 西暦はそれ。 新暦=西暦から元号取得。 「{西暦}{改行}{新暦}年」を言う。 /* 旧暦=西暦から「旧暦」で元号取得。 「{西暦}:{新暦}年:{旧暦}年」を表示。 */ ここまで。 ここまで。