0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

便利ページ:元号を変換してみた

Last updated at Posted at 2019-05-01

前回、なにかと便利なページを作成しました。

 便利ページ:Javascriptでちょっとした便利な機能を作ってみた
 便利ページ:自分のQiita記事を一覧表示

今回は元号(和暦)を西暦に変換するページを追加しました。

元号は以下のWikiを参考にしています。
 https://ja.wikipedia.org/wiki/%E5%85%83%E5%8F%B7%E4%B8%80%E8%A6%A7_(%E6%97%A5%E6%9C%AC)

毎度の通り、デモページとGitHubです。

GitHub
 https://github.com/poruruba/utilities

デモページ
 https://poruruba.github.io/utilities/

元号一覧

このデータを作るのがすごくつらかったです。
こんな感じの元号データのjavascriptファイルです。
大化の改新から始まって、現在元年の令和までです。

gengou.js

const gengou_list = [
    {"name":"大化","yomi":"たいか","start":645,"end":650,"extra":""},
    {"name":"白雉","yomi":"はくち","start":650,"end":654,"extra":""},

・・・

    {"name":"昭和","yomi":"しょうわ","start":1926,"end":1989,"extra":""},
    {"name":"平成","yomi":"へいせい","start":1989,"end":2019,"extra":""},
    {"name":"令和","yomi":"れいわ","start":2019,"extra":""},
];

変換ロジックを作成する

あとは、和暦から西暦、西暦から和暦に変換するスクリプトを書いていきます。
元号一覧から対象元号を検索します。

start.js
        /* 元号 */
        gengou_search_era: function(era){
            for( var i = 0 ; i < this.gengou_list.length ; i++ ){
                if( this.gengou_list[i].name == era )
                    return this.gengou_list[i];
            }

            return null;
        },
        gengou_search_anno: function(anno){
            for( var i = 0 ; i < this.gengou_list.length ; i++ ){
                if( this.gengou_list[i].start <= anno && (this.gengou_list[i].end ? anno <= this.gengou_list[i].end : true ))
                    return this.gengou_list[i];
            }

            return null;
        },
        gengou_to_anno: function(){
            var era_name = (this.gengou_era_name == 'その他') ? this.gengou_era_other : this.gengou_era_name;
            var gengou = this.gengou_search_era(era_name);
            if( !gengou ){
                alert('入力が不正です。');
                return;
            }
        
            var year = Number(this.gengou_era_year);
            if( year <= 0 ){
                alert('入力が不正です。');
                return;
            }

            var anno_year = gengou.start + year - 1;
            if( gengou.end && anno_year > gengou.end ){
                alert('入力が不正です。');
                return;
            }
            this.gengou_anno_year = anno_year;
        },
        gengou_to_era: function(){
            var year = Number(this.gengou_anno_year);
            var gengou = this.gengou_search_anno(year);
            if( !gengou ){
                alert('入力が不正です。');
                return;
            }

            if( gengou.name == '令和' || gengou.name == '平成' || gengou.name == '昭和' || gengou.name == '大正' || gengou.name == '明治' ){
                this.gengou_era_name = gengou.name;
            }else{
                this.gengou_era_name = 'その他';
                this.gengou_era_other = gengou.name;
            }

            this.gengou_era_year = year - gengou.start + 1;
        },

#補足

ちなみに、元号は大化から全部入れているのですが、まあ、あまり使わないでしょう。
もし使う場合の注意点なのですが、途中複数の元号が同時に存在していた時期があるようです(1329年から1394年のあたり)。また、大化の後でも、元号が存在しない時期があるようです(654年、686年)。そういったところは、上記の変換ロジックは不十分です。(困る人はいなそうなので、このままにしています)

以上

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?