アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【Node.jsJavaScriptMacOSDebian
【Node.js】chrono-nodeを使用して自然言語を日付に変換する
POSTED BY
2025-12-21

Pythonであればdateparserが有名だが、性能はこのNodeのchrono-nodeのほうが体感上。

Node.jsをインストールしておく。【Javascript】Node.jsインストールメモ

chrono-nodeをインストールする。

npm install chrono-node

chrono-nodeをコールするNode.jsコードを書く。

JavaScriptparse_dt.jsGitHub Source
// parse_dt.js
const chrono = require("chrono-node");

// WindowsのコンソールでもUTF-8で出す(保険)
if (process.platform === "win32") {
  process.stdout.setDefaultEncoding("utf8");
}

const text = process.argv[2] || "";
const refISO = process.argv[3] || null;
const ref = refISO ? new Date(refISO) : new Date();

const results = chrono.ja.parse(text, ref, { forwardDate: true });

if (!results.length) {
  console.log(JSON.stringify({ found: false }));
  process.exit(0);
}

const r = results[0];
const d = r.start.date();

console.log(JSON.stringify({
  found: true,
  raw: r.text,
  date: d.toISOString(),
  knownValues: r.start.knownValues,
  impliedValues: r.start.impliedValues,
}, null, 2));

テストする。

node parse_dt.js "明日"
{
  "found": true,
  "raw": "明日",
  "date": "2025-12-22T11:50:16.513Z",
  "knownValues": {
    "day": 22,
    "month": 12,
    "year": 2025
  },
  "impliedValues": {
    "hour": 20,
    "minute": 50,
    "second": 16,
    "millisecond": 513
  }
}

node parse_dt.js "来週の土曜日"
{
  "found": true,
  "raw": "土曜日",
  "date": "2025-12-27T03:00:00.000Z",
  "knownValues": {
    "weekday": 6
  },
  "impliedValues": {
    "hour": 12,
    "minute": 0,
    "second": 0,
    "millisecond": 0,
    "day": 27,
    "month": 12,
    "year": 2025
  }
}

node parse_dt.js "明日" "2025-01-01"
{
  "found": true,
  "raw": "明日",
  "date": "2025-01-02T00:00:00.000Z",
  "knownValues": {
    "day": 2,
    "month": 1,
    "year": 2025
  },
  "impliedValues": {
    "hour": 9,
    "minute": 0,
    "second": 0,
    "millisecond": 0
  }
}

node parse_dt.js "12/25 14時"       
{
  "found": true,
  "raw": "12/25 14時",
  "date": "2025-12-25T05:00:00.000Z",
  "knownValues": {
    "day": 25,
    "month": 12,
    "hour": 14,
    "minute": 0
  },
  "impliedValues": {
    "year": 2025,
    "second": 0,
    "millisecond": 0,
    "meridiem": 1
  }
}
node parse_dt.js "明後日"    
{"found":false}

node parse_dt.js "あさって"
{"found":false}

なかなか優秀、しかし「あさって」くらいはわかって欲しいけどね。

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】