龙空技术网

Chrono.js:Javascript 中的日期 NLP 库

高级前端进阶 1034

前言:

此时咱们对“js当前时间代码”可能比较重视,各位老铁们都想要了解一些“js当前时间代码”的相关内容。那么小编在网上收集了一些对于“js当前时间代码””的相关知识,希望你们能喜欢,我们快快来学习一下吧!

家好,很高兴又见面了,我是"高级前端‬进阶‬",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。

什么是 Chrono (v2)

Chrono 是 Javascript 中的自然语言日期解析器,它旨在处理大多数日期/时间格式并从任何给定文本中提取信息,内容包括:

今天、明天、昨天、上周五等2013 年 8 月 17 日 - 2013 年 8 月 19 日本周五 13:00 - 16:005 天前2 周后2013 年 8 月 17 日星期六 18:40:39 GMT+0900 (JST)2014-11-30T08:15:30-05:30

目前 Chrono 在 Github 上通过 MIT 协议开源,有超过 3.5k 的 star,值得尝试。

如何使用 Chrono (v2)基础使用

首先需要通过 NPM 安装:

npm install --save chrono-node

然后直接在代码中引入即可:

import * as chrono from 'chrono-node';chrono.parseDate('An appointment on Sep 12-13');

如果是 Node.js 环境,可以使用下面的代码:

const chrono = require('chrono-node');// or `import chrono from 'chrono-node'` for ECMAScript

对于 Chrono 库来说,只需将字符串传递给函数 chrono.parseDate 或 chrono.parse 即可。

import * as chrono from 'chrono-node';chrono.parseDate('An appointment on Sep 12-13');// Fri Sep 12 2014 12:00:00 GMT-0500 (CDT)chrono.parse('An appointment on Sep 12-13');/* [{     index: 18,    text: 'Sep 12-13',    start: ...}] */
解析参考(日期/时区)

今天的“星期五”与上个月的“星期五”不同,引用日期的含义取决于它们被提及的时间和地点。 Chrono 允许开发者将引用定义为 Date 或 ParsingReference 对象:

// (Note: the exmaples run on JST timezone)chrono.parseDate('Friday', new Date(2012, 8 - 1, 23));// Fri Aug 24 2012 12:00:00 GMT+0900 (JST)chrono.parseDate('Friday', new Date(2012, 8 - 1, 1));// Fri Aug 03 2012 12:00:00 GMT+0900 (JST)chrono.parseDate('Friday at 4pm', {  // Wed Jun 09 2021 21:00:00 GMT+0900 (JST)  // = Wed Jun 09 2021 07:00:00 GMT-0500 (CDT)  instant: new Date(1623240000000),  timezone: 'CDT',});// Sat Jun 12 2021 06:00:00 GMT+0900 (JST)// = Fri Jun 11 2021 16:00:00 GMT-0500 (CDT)
解析配置

forwardDate(布尔值)假设结果应该在参考日期之后发生。

const referenceDate = new Date(2012, 7, 25);// Sat Aug 25 2012 00:00:00 GMT+0900 -- The reference date was Saturdaychrono.parseDate('Friday', referenceDate);// Fri Aug 24 2012 12:00:00 GMT+0900 (JST) -- The day before was Fridaychrono.parseDate('Friday', referenceDate, { forwardDate: true });// Fri Aug 31 2012 12:00:00 GMT+0900 (JST) -- The following Friday

timezones 覆盖或添加时区缩写和偏移量之间的自定义映射。 当希望 Chrono 将某些文本解析为给定的时区偏移量时,请使用此选项。 Chrono 支持明确的(正常)时区映射和模糊映射,其中夏令时期间和之外的偏移量不同。

// Chrono doesn't understand XYZ, so no timezone is parsedchrono.parse('at 10:00 XYZ', new Date(2023, 3, 20))// "knownValues": {"hour": 10, "minute": 0}// Make Chrono parse XYZ as offset GMT-0300 (180 minutes)chrono.parse('at 10:00 XYZ', new Date(2023, 3, 20), { timezones: { XYZ: -180 } })// "knownValues": {"hour": 10, "minute": 0, "timezoneOffset": -180}// Make Chrono parse XYZ as offset GMT-0300 outside of DST, and GMT-0200 during DST. Assume DST is between import { getLastDayOfMonthTransition } from "timezone";import { Weekday, Month } from "parsing";const parseXYZAsAmbiguousTz = {  timezoneOffsetDuringDst: -120,  timezoneOffsetNonDst: -180,  dstStart: (year: number) => getLastWeekdayOfMonth(year, Month.FEBRUARY, Weekday.SUNDAY, 2),  dstEnd: (year: number) => getLastWeekdayOfMonth(year, Month.SEPTEMBER, Weekday.SUNDAY, 3)};// Parsing a date which falls within DSTchrono.parse('Jan 1st 2023 at 10:00 XYZ', new Date(2023, 3, 20), { timezones: { XYZ: parseXYZAsAmbiguousTz } })// "knownValues": {"month": 1, ..., "timezoneOffset": -180}// Parsing a non-DST datechrono.parse('Jun 1st 2023 at 10:00 XYZ', new Date(2023, 3, 20), { timezones: { XYZ: parseXYZAsAmbiguousTz } })// "knownValues": {"month": 6, ..., "timezoneOffset": -120}
参考资料

标签: #js当前时间代码