【问题标题】:Is there a natural language parser for date/times in javascript?javascript中是否有用于日期/时间的自然语言解析器?
【发布时间】:2009-06-16 18:54:40
【问题描述】:

javascript 中是否有用于日期/时间的自然语言解析器?

【问题讨论】:

  • 与您的其他帖子非常相似 stackoverflow.com/questions/1003330/… 为什么不直接说 javascript 或 Cold Fusion?
  • 一个是客户端解决方案,一个是服务器端。我觉得尝试将它们结合起来会导致 3 个问题: 1. 哪个更好? 2. 最好的客户端解决方案是什么? 3.什么是最好的服务器端解决方案?

标签: javascript datetime nlp


【解决方案1】:

我创建了Chrono 一个小型库,用于在 JavaScript 中解析日期。我添加了日期范围解析功能(例如“2012 年 11 月 12 日 - 12 月 13 日”)。

【讨论】:

  • 你拥有迄今为止我在 JavaScript 中找到的最好的 NLP。到目前为止的排名是:#1 chrono,#2 Sugarjs,#3 datejs。提示:我建议您将其重命名为 Chronojs,以便为其提供更易于搜索和独特的名称。
【解决方案2】:

SugarJS 支持日期和时间的一些自然语言解析。

您可以在此处跳转到实时示例:http://sugarjs.com/dates

例如,它支持以下输入:

  • 后天
  • 从星期一开始 2 周
  • 明年5月25日

然后您可以将结果转换为不同的日期格式或使用 API 进一步操作日期。

【讨论】:

  • SugarJS 更好,尤其是在处理包含日期和时间的情况时。
  • 我完全同意@Haozhun。我以前使用过 MomentJS、DateJS 和 SugarJS,但 IMO 后者是迄今为止 NLP 方面最好的。
【解决方案3】:

Date.js 是否满足您的需求?还是您在寻找其他东西?

【讨论】:

  • 我发现了,但源代码在多个层面上让我害怕。我希望能与“现代”javascript 库之一集成的东西。
  • 什么让你害怕,原生对象的扩展?还是别的什么?
  • 从表面上看,缺少格式和/或缺少开发版本和生产版本。它也不是一个活跃的项目,可能与每个人都不相关。
  • 不过,我从未见过任何接近它的东西,尤其是所有本地化。如果您发现其他东西,请告诉我们。也许有人应该把它作为一个项目来接管。
  • svn 在 2008 年末做了一些改动,所以现在还不算过时。
【解决方案4】:

对于节点,我发现 chrono 运行良好

Chrono 支持大多数日期和时间格式,例如:

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

【讨论】:

  • 这是 Wanasit Tanakitrungruang 答案的副本。
【解决方案5】:

Sherlock 很棒。

var Sherlock = require('sherlockjs');
var sherlocked = Sherlock.parse('Homework 5 due next monday at 3pm');

// Basic properties
var title = sherlocked.eventTitle;    // 'Homework 5 due'
var startDate = sherlocked.startDate; // Date object pointing to next monday at 3pm
var endDate = sherlocked.endDate;     // null in this case, since no duration was given
var isAllDay = sherlocked.isAllDay;   // false, since a time is included with the event

// Example of an additional custom property added by Watson
var validated = sherlocked.validated; // true

【讨论】:

    【解决方案6】:

    您可以使用 jQuery datepicker 翻译,获取日期和月份编号并从 datepicker days 中选择日期。

    你可以给这个对象添加值,我认为你可以下载多达 60 种语言。 (下面的对象不完整,我删除了一些代码以简化它。

    $.datepicker.regional['sv'] = { 
      monthNames:['Januari','Februari','Mars','April','Maj','Juni','Juli','Augusti','September','Oktober','November','December'],
      monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun','Jul','Aug','Sep','Okt','Nov','Dec'],
      dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
      dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
      dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö']
    };
    

    现在获取日期和月份数

    var dateObject = new Date();
    var day = dateObject.getDay();
    var month = dateObject.getMonth();
    var monthText = $.datepicker.regional['sv']['monthNames'][month];
    var dayText = $.datepicker.regional['sv']['dayNames'][day];
    

    【讨论】:

    • 这不能回答问题。 OP 要求一个 解析器,即一个函数,它接受一个像 '23/02/1945' 或 'next monday' 这样的字符串并返回一个 Date 对象。
    猜你喜欢
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2010-11-27
    • 2012-07-05
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多