2
2

More than 1 year has passed since last update.

【JavaScript】西暦の年だけを用いて和暦の年を表示する方法

Last updated at Posted at 2022-02-10

こうする

See the Pen Untitled by qwe001 (@qwe001) on CodePen.

function convertYearToJapaneseEra(year)
{
  var m = new Date(year, 0, 1); // e.g. "2022-01-01"
  var dt = new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {era: 'short'});
  var [{ value: era }, { value: year }] = dt.formatToParts(m); // e.g. {type: 'era', value: '令和'},{type: 'year', value: '4'},{type: 'literal', value: '年'}
  var str = era + year;
  return str; // e.g. "令和4"
}

普通に西暦から「2018」を引けば令和年は算出できますが、私の場合は平成年のデータも入るので将来的なメンテナンス性を考えてIntl.DateTimeFormatを使ってみることにしました

令和元年(2019年)は平成31年として表示されます。
令和元年を令和元年として表示したいなら、new Date(year, 0, 1);new Date(year, 4, 1);にしたらええんちゃう。知らんけど

追記

「令和4年」みたいなオーソドックスな取得をする場合は、以下の方法でも可能です(@lhankor_mhy様 コメントありがとうございます。)

function convertYearToJapaneseEra(year)
{
  var m = new Date(year, 0, 1); // e.g. "2022-01-01"
  var dt = new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {era: 'short', year: 'numeric'});  
  var str = dt.format(m);
  return str; // e.g. "令和4年"
}

eraの値をnarrowにすれば、「R4」みたいな感じでアルファベット表記で取得できます。ただし、明治以前の年(1868年 慶応など)は、アルファベット表記に対応しておらず、「慶応」のまま表示されます。

function convertYearToJapaneseEra(year)
{
  var m = new Date(year, 0, 1); // e.g. "2022-01-01"
  var dt = new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {era: 'narrow'});
  var [{ value: era }, { value: year }] = dt.formatToParts(m); // e.g. {type: 'era', value: 'R'},{type: 'year', value: '4'},{type: 'literal', value: '年'}
  var str = era + year;
  return str; // e.g. "R4"
}

eraの値がlongの場合、スマホのMobile Chromeなどで見た時に正しく和暦が表示されないようです(2022.02時点)

  var dt = new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {era: 'long'});

Screenshot_2022-02-10-19-40-22-94_a87fd7db6caa850b517aa6fa9d2fcd0e.jpg

  var dt = new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {era: 'short'});

Screenshot_2022-02-10-19-40-51-71_a87fd7db6caa850b517aa6fa9d2fcd0e.jpg

2
2
1

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