🕰️
「今夜」「令和元年」「4 PM」様々な日時をパースできるNode.jsパッケージ"chrono"の紹介
「昨日」「今夜」「令和元年5月1日」「12月31日」「1996年5月3日」「2025/4/1(火)10:00」
「Friday at 4pm」「June 10th, 2018」「6/10/2018」「tomorrow from 10 to 11 AM」
一定のフォーマットに沿っていない日付のテキストをDate型にパースしたいことはありませんか?
上記のような自然言語の日時をパースするchrono というNode.jsパッケージを紹介します。
前提条件
今回、動作確認した環境は、以下の通りです。
項目 | バージョン |
---|---|
Windows11 | 24H2 |
Node.js | 18.19.0 |
npm | 10.2.3 |
chrono-node | 2.8.2 |
また、動作確認した日付は2025年4月6日で、システムのタイムゾーンはJSTです。
英語
chronoのデフォルトの言語は英語であり、英語の機能が最も充実しています。
const chrono = require('chrono-node');
chrono.parseDate('6/10/2018');
// June 10th, 2018
chrono.parseDate('next Friday at 4pm')
// 2025-04-11T07:00:00.000Z
日付の開始と終了をパースすることも可能です。
const chrono = require('chrono-node');
const results = chrono.parse('I have an appointment July 1st from 10 to 11 AM');
results[0].index; // 22
results[0].text; // 'July 1st from 10 to 11 AM'
results[0].refDate; // 現在時刻
results[0].start.date(); // Mon Jul 1 2025 10:00:00 GMT+0900 (JST)
results[0].end.date(); // Mon Jul 1 2025 11:00:00 GMT+0900 (JST)
日本語
日本語でも、日付と時間をパースできます。
const chrono = require('chrono-node');
chrono.ja.parseDate('明日はある')
// 2025-04-07T07:37:35.814Z
chrono.ja.parseDate("今夜は火星がとても明るい")
// 2025-04-06T13:00:00.000Z (JSTの22:00)
chrono.ja.parseDate('昭和64年1月7日です');
// 1989-01-07T03:00:00.000Z (JSTの正午)
chrono.ja.parseDate('令和元年5月1日');
// 2019-05-01T03:00:00.000Z (JSTの正午)
chrono.ja.parseDate('2000年1月1日は来るのか'); // 全角数字
// 2000-01-01T03:00:00.000Z (JSTの正午)
chrono.ja.parseDate('2014年3月5日午後6時半');
// 2014-03-05T09:30:00.000Z (JSTの18:30)
日付の開始と終了をパースすることも可能です。
const chrono = require('chrono-node');
result = chrono.ja.parse('2025/4/1(火) 9:00 ~ 2025/4/2(水) 17:00')
results[0].start.date(); // Tue Apl 1 2025 09:00:00 GMT+0900 (JST)
results[0].end.date(); // Wen Apl 2 2025 17:00:00 GMT+0900 (JST)
おわりに
正規表現や分岐などを駆使して自分でパーサーを作るのは中々骨が折れますよね。
chrono、よければ使ってみてください。
Discussion