challenge 西暦 to 和暦

西暦を和暦に変換するプログラムを書いてください。元号の切り替わる日など、複数の表記が可能な場合には両方表示し、西暦が無効な日付の場合には「範囲外」と表示するようにしてください。対応すべき日付は明治元年以降とします。

>a.py 1868/12/2
明治1年12月2日

>a.py 1926/12/24
大正15年12月24日

>a.py 2007/12/01
平成19年12月1日

>a.py 1926/12/25
大正15年12月25日 昭和1年12月25日

>a.py 1868/1/2
範囲外

>a.py 1868/100/2
範囲外

Posted feedbacks - JavaScript

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<html>
<head>
<title>西暦 to 和暦</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
<!--
//*******************************************************
// 西暦 to 和暦
//*******************************************************
function toWareki(numYear, numMonth, numDay) {
    var today = new Date();
    numCurYear = today.getFullYear();
    numCurMon = today.getMonth() + 1;
    numCurDay = today.getDate();
    
    strDate = '' + numYear + ((numMonth < 10) ? '0' : '') + numMonth + ((numDay < 10) ? '0' : '') + numDay;
    strCurDate = '' + numCurYear + ((numCurMon < 10) ? '0' : '') + numCurMon + ((numCurDay < 10) ? '0' : '') + numCurDay;

    var arrWareki = [
        {'name': '明治', 'start': '18680908', 'end': '19120730'},
        {'name': '大正', 'start': '19120730', 'end': '19261225'},
        {'name': '昭和', 'start': '19261225', 'end': '19890107'},
        {'name': '平成', 'start': '19890108', 'end': strCurDate}
    ];
    
    var strName = '';
    for(var i=0; i<arrWareki.length; i++) {
        if(arrWareki[i]['start'] <= strDate && strDate <= arrWareki[i]['end']) {
            var strAnd = (strName == '') ? '' : '年&nbsp;';
            var numBaseYear = parseInt(arrWareki[i]['start'].substring(0,4));
            strName += strAnd + arrWareki[i]['name'] + (numYear - numBaseYear + 1);
        }
    }

    return (strName == '') ? '範囲外' : strName + '年' + numMonth + '月' + numDay + '日';
}
//-->
</script>
</head>
<body>
西暦:<br/>
<input type="text" id="year" value="2008" size="4" />
<input type="text" id="month" value="1" size="2" />
<input type="text" id="day" value="9" size="2" />
<input type="button" value="変換" onclick="document.getElementById('wareki').innerHTML=toWareki(document.getElementById('year').value, document.getElementById('month').value, document.getElementById('day').value);" />
<br/>
和暦:<br>
<div id="wareki">&nbsp;</div>
</body>
</html>

seireki2wareki("1868/9/8")
>>範囲外

seireki2wareki("1873/1/1")
>>明治6年1月1日

seireki2wareki("1926/12/24")
>>大正15年12月24日

seireki2wareki("2007/12/01")
>>大正15年12月24日

seireki2wareki("1926/12/25")
>>大正15年12月24日

seireki2wareki("1868/1/2")
>>範囲外

seireki2wareki("1873/100/2")
>>範囲外
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function seireki2wareki(y){
    var c = new Date(y);
    
    if(c.getFullYear()<1873) return "範囲外";
    
    var wareki = {
        '明治' : [new Date("1868/9/8"), new Date("1912/7/30")],
        '大正' : [new Date("1912/7/30"), new Date("1926/12/25")],
        '昭和' : [new Date("1926/12/25"), new Date("1989/1/7")],
        '平成' : [new Date("1989/1/8"), new Date()]
    }
    var a = [];

    for(w in wareki){
        var from = wareki[w][0];
        var to = wareki[w][1];
        
        if((c>=from && c<=to)){
            var n1 = (to.getFullYear()- from.getFullYear())+1;
            var n2 = to.getFullYear()- c.getFullYear();
            
            a.push(w+ (n1-n2)+ "年"+ (c.getMonth()+1)+ "月"+ c.getDate()+ "日");
        }
    }
    
    return a.join(" ") || "範囲外";
}

Index

Feed

Other

Link

Pathtraq

loading...