すでにPerlに関してはdmakiがDateTime::Calendar::Japaneseを出しているのでJavaScriptで。
西暦から和暦を変換してくれるRailsプラグイン: JaDates : HotWeb Magazine最近とあるRailsプロジェクトで4月5日2008年ではなく、平成20年4月5日として表示したかったがそれを簡単に変換するヘルパーがなかったので、ヘルパーを開発しました。
待ち時間の暇つぶしで書いたので大したものではありませんが、そこそこ使えるかも。
年
月
日は
です。
明治から平成までしかサポートしていませんが、年単位ではなく日単位で対応してます。1989年1月7日とかにしてみてください。
ソースはこちら。
Date.JapaneseEra = {
'M':(new Date(1868, 0, 25)).getTime(),
'T':(new Date(1912, 6, 30)).getTime(),
'S':(new Date(1926, 11, 25)).getTime(),
'H':(new Date(1989, 0, 6)).getTime()
};
Date.prototype.getJapaneseYear = function(){
var when = this.getTime();
var yyyy = this.getFullYear();
if (when < Date.JapaneseEra['M']) throw "too many years ago";
if (when < Date.JapaneseEra['T']) return "明治" + (yyyy - 1868);
if (when < Date.JapaneseEra['S']) return "大正" + (yyyy - 1912);
if (when < Date.JapaneseEra['H']) return "昭和" + (yyyy - 1925);
return "平成" + (yyyy - 1988);
};
Date.prototype.getJapaneseYear = function(){
var when = this.getTime();
var yyyy = this.getFullYear();
if (when < Date.JapaneseEra['M']) throw "too many years ago";
if (when < Date.JapaneseEra['T']) return "明治" + (yyyy - 1868);
if (when < Date.JapaneseEra['S']) return "大正" + (yyyy - 1912);
if (when < Date.JapaneseEra['H']) return "昭和" + (yyyy - 1925);
return "平成" + (yyyy - 1988);
};
Date.prototype.toJapaneseDateString = function(){
return this.getJapaneseYear() + '年'
+ (this.getMonth() + 1) + '月'
+ this.getDate() + '日';
};
function update_nengo(){
var $ = function(id){ return document.getElementById(id) };
var yyyy = parseInt($('yyyy').value);
var mm = parseInt($('mm').value)-1;
var dd = parseInt($('dd').value);
var isleap = function(yyyy){
return yyyy % 4 != 0 ? false :
yyyy % 100 != 0 ? true :
yyyy % 400 != 0 ? false : true;
};
var dofm = [31, (isleap(yyyy) ? 29 : 28), 31, 30, 31, 30,
31, 31 , 30, 31, 30, 31][mm];
if (dd > dofm) dd = dofm;
$('dd').innerHTML = '';
for (var i = 1; i <= dofm; i++){
var option = document.createElement('option');
option.innerHTML = i;
if (i == dd) option.setAttribute('selected', true);
$('dd').appendChild(option);
};
var when = new Date(yyyy, mm, dd);
$('nengo').innerHTML = when.toJapaneseDateString();
};
update_nengo();
Enjoy!
Dan the Man with Too Many Calendars to Support
おもすれ〜
西暦1年1月7日は明治33年1月7日です。
キタコレ