提取在Chronic中传递给解析方法的已识别日期字符串

时间:2014-01-24 15:41:59

标签: ruby-on-rails ruby gem chronic

我想模仿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.+)/)

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

两个问题:

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

1 个答案:

答案 0 :(得分:2)

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

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"