LoginSignup
0
0

More than 3 years have passed since last update.

【imi-enrichment-date】年号を含む日付表示の正規化

Posted at

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日のような表現はエラーになります。役所に行ってなにか申請書を書こうとすると、最近では配慮が進んでいて年号ではなく「西暦」に丸がつけられるようになっていることがありますよね。西暦と年号表示を並行して使用しているシステムでは注意が必要です。

リンク

0
0
0

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