すでに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