0

我想模仿 Mac 日历快速事件或 Fantastical 的快速输入的功能。使用 Chronic gem,我可以传递如下字符串:

"Today at 3pm"
=> 2014-01-24 15:00:00 -0600 

如果您传入以下内容,则慢性解析不起作用:

"Eat at Joes Today at 3pm" 
=> nil

到目前为止,我所做的是使用一个简单的正则表达式将字符串拆分为通常用于返回 Chronic 日期的单词。初始正则表达式很简单:

scan(/(.+)(tomorrow{1}.+|in\s.+|next\s.+|today\s.+)/)

如果您愿意,这将返回一个带有“标题”的数组,以及我想发送给 Chronic 为我解析的字符串。

两个问题:

  1. 这真的是最好的方法吗?我必须提供一些大型正则表达式来拆分我认为我的用户将在这里提交的任何字符串。
  2. 在 Chronic 中进行黑客攻击会更好吗?它已经在为我解析日期,但我最初的想法是否定的,因为如果你传递Eat at Joes Today at 3pm给 Chronic.parse,它将返回 nil。似乎它无法识别字符串中用于格式化当前形式的日期的部分。
4

1 回答 1

2

我不会编辑慢性病。Chronic 的唯一功能是解析自然语言日期时间,而不是其他输入。您可能对Nickel这里的宝石感兴趣:

https://github.com/iainbeeston/nickel

这将时间与其他语言分开。

n = Nickel.parse("use the force on july 1st at 9am", Time.now)
n.message                       #=> "use the force"
n.occurrences.first.start_date  #=> "20110701"
于 2014-01-24T15:53:11.053 回答