はじめに

JavaScript で yukik/koyomi を使って和暦を算出する方法を整理した。

TL;DR

目次

  1. はじめに
  2. TL;DR
  3. 環境・条件
  4. 詳細
    1. 前置き
    2. yukik/koyomi の使い方
  5. まとめ
  6. その他・メモ
  7. 参考文献

環境・条件

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
51
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.5
BuildVersion: 19F101

$ node -v
v12.7.0

$ npm -v
6.14.5

# 以下は NativeScript (wareki を動かしている環境) 関連
$ tns --version
6.5.0

$ grep -C1 version package.json
"tns-android": {
"version": "6.5.1"
},
"tns-ios": {
"version": "6.5.1"
}

$ tns plugin
Dependencies:
┌───────────────────────────────┬─────────────────────┐
│ Plugin │ Version │
│ @nativescript/theme │ ^2.2.1 │
│ @vue/devtools │ ^5.0.6 │
│ koyomi │ github:yukik/koyomi │
│ lodash │ ^4.17.15 │
│ nativescript-socketio │ ^3.2.1 │
│ nativescript-toasty │ ^1.3.0 │
│ nativescript-vue │ ^2.4.0 │
│ nativescript-vue-devtools │ ^1.2.0 │
│ tns-core-modules │ ^6.0.0 │
│ vuex │ ^3.1.1 │
└───────────────────────────────┴─────────────────────┘
Dev Dependencies:
┌────────────────────────────────────┬─────────┐
│ Plugin │ Version │
│ @babel/core │ ^7.0.0 │
│ @babel/preset-env │ ^7.0.0 │
│ @fortawesome/fontawesome-pro │ ^5.13.0 │
│ babel-loader │ ^8.0.2 │
│ nativescript-dev-webpack │ ^1.0.0 │
│ nativescript-vue-template-compiler │ ^2.0.0 │
│ nativescript-worker-loader │ ~0.9.0 │
│ node-sass │ ^4.9.2 │
│ vue-loader │ ^15.4.0 │
└────────────────────────────────────┴─────────┘

詳細

前置き

yukik/koyomi を使わずとも、環境によっては Intl.DateTimeFormattoLocaleString で和暦を取得可能。

以下は「Google Chrome バージョン: 83.0.4103.97(Official Build)(64 ビット)」の Developer Tools 上で確認。

Intl.DateTimeFormat

1
2
3
4
const date = new Date(2019, 4, 1, 0, 0, 00);
const options = {era: 'long'};
console.log(new Intl.DateTimeFormat('ja-JP-u-ca-japanese', options).format(date));
// => 令和1/5/1

toLocaleString

1
2
3
4
5
const date = new Date(2019, 4, 1, 1, 20, 30);
const options = {era: 'long'};
const locale = 'ja-JP-u-ca-japanese';
console.log(date.toLocaleString(locale, options));
// => 令和1/5/1 1:20:30

詳しくは以下を参照。


今回の対象(NativeScript 上)では、上記のどちらの方法でも和暦を取得できなかったため yukik/koyomi を利用した。

yukik/koyomi の使い方

yukik/koyomi をインストール。

npm i koyomi だとバージョンが古く「令和」に未対応だった(※)ため、npm i yukik/koyomi で GitHub からインストール。

1
$ npm i yukik/koyomi

_.uniq を使いたいので lodash もインストール。

1
$ npm i lodash

koyomi.format(2020-04-01 09:00:00, 'GGN年')令和2年 が取得できる。

直近50年の和暦を取得する場合は以下。残念ながら yukik/wareki では改元年の「平成31年」や「昭和64年」には未対応っぽい。

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
const koyomi = require('koyomi');
const _ = require('lodash');

const getWarekiArray = (duration = 50) => {
let warekiArray = [];
let year = 2020; // 面倒なのでハードコード
for (let i = 0; i < duration; i ++) {
warekiArray.push(koyomi.format(`${year - i}-01-02 09:00:00`, 'GGN年'));
warekiArray.push(koyomi.format(`${year - i}-06-01 09:00:00`, 'GGN年'));
warekiArray.push(koyomi.format(`${year - i}-12-30 09:00:00`, 'GGN年'));
}
return _.uniq(warekiArray);
}

getWarekiArray();
// => [
// '令和2年', '令和1年', '平成30年', '平成29年', '平成28年',
// '平成27年', '平成26年', '平成25年', '平成24年', '平成23年',
// '平成22年', '平成21年', '平成20年', '平成19年', '平成18年',
// '平成17年', '平成16年', '平成15年', '平成14年', '平成13年',
// '平成12年', '平成11年', '平成10年', '平成9年', '平成8年',
// '平成7年', '平成6年', '平成5年', '平成4年', '平成3年',
// '平成2年', '平成1年', '昭和63年', '昭和62年', '昭和61年',
// '昭和60年', '昭和59年', '昭和58年', '昭和57年', '昭和56年',
// '昭和55年', '昭和54年', '昭和53年', '昭和52年', '昭和51年',
// '昭和50年', '昭和49年', '昭和48年', '昭和47年', '昭和46年'
// ]

その他、細かい使い方はドキュメント一覧を参照。

まとめ

その他・メモ

hrdaya/UltraDate.js というのもあるっぽい。

参考文献

関連記事