imi-enrichment-dateとは
経産省のジービスインフォというサイトで公開されているオープンソースライブラリの1つで、
令和3年2月26日
のような日付表示を2021-02-26
といった形式に正規化することができます。
MITライセンスで公開されているので商用利用も可能です。
インストールの仕方
このツールはnpmのようなパッケージ頒布サイトでは公開されていないようで、
経産省のサイトあるいはプロジェクトのGitHubページからダウンロードして用います。
# on your own project
npm install https://info.gbiz.go.jp/tools/imi_tools/resource/imi-enrichment-date/imi-enrichment-date-1.0.0.tgz
使い方
ここでは自分のプロジェクトに組み込んで使う方法を紹介します。
ライブラリから適当な名前で読み込んだ関数は、引数に2021年2月26日
や令和三年二月二六日
のような日付を表す文字列か、{"@type": "日付型", "表記": "2021年2月26日"}
のようなオブジェクトを引数にとります。
const normarizeDate = require("imi-enrichment-date");
console.log(normarizeDate("令和3年2月26日"));
// or
const date = {
"@type": "日付型",
"表記": "令和3年2月26日"
};
console.log(normarizeDate(date));
{
'@context': 'https://imi.go.jp/ns/core/context.jsonld',
'@type': '日付型',
'表記': '令和3年2月26日',
'標準型日付': '2021-02-26'
}
出力はyyyy-mm-dd
形式で、上記のようなオブジェクトとして返ってきます。
どのように変換を行っているのか気になったのでソースコードを見てみると、「漢数字・全角の算用数字を半角の算用数字に変換」→「年号が含まれる場合は正規表現で処理」といった流れで変換がなされているようでした。
どのようなパターンに対応しているのか
日付表示にはさまざまなフォーマットがありますが、このライブラリが対応しているフォーマットは以下のとおりです。
形式 | 例 | 備考 |
---|---|---|
年・月・日がなんらかの文字で区切られているもの | 2020/01/01 | 区切り文字は数字以外ならなんでもよい |
先頭に元号を含むもの | 平成10年10月10日 | 明・昭など一文字や、㍽・㋿のような合字、あるいはH・hのようなアルファベットでもよい |
漢数字を含むもの | 一九九九年十二月三〇日 | 三十ではなく三〇のような書き方をしてもOK |
元年という表現を含むもの | 令和元年3月24日 |
2/26/2021(2021年2月26日)
のようなアメリカ式の日付表示には対応していませんが、日本で使われている日付表示の方式にはほぼ対応しているライブラリといえます。
ひとつだけ気をつけるべきこととしては、21年2月26日
のように年の上二桁を省略した書き方をすると、意図せず1921-2-26
となってしまう点があります。これはエラーにはならないので注意が必要です。
また(これはあまり一般的ではありませんが)、西暦2021年2月26日
のような表現はエラーになります。役所に行ってなにか申請書を書こうとすると、最近では配慮が進んでいて年号ではなく「西暦」に丸がつけられるようになっていることがありますよね。西暦と年号表示を並行して使用しているシステムでは注意が必要です。
リンク
- IMI 情報共有基盤 コンポーネントツール
- IMI Tool Project