2014-01-24 13 views
0

我想模仿Mac日曆快速事件或Fantastical的快速​​輸入的功能。使用慢性寶石,我可以通過類似的字符串:提取認可的日期字符串傳遞給解析方法在慢性

"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.+)/) 

這將返回數組與「標題」,如果你願意,我要發送到慢性字符串解析我。

兩個問題:

  1. 這真的是做到這一點的最好方法是什麼?我不得不提供一些超級正則表達式來分割我認爲我的用戶將在這裏提交的任何字符串。
  2. 慢性黑客會更好嗎?它已經解析了我的日期,但我最初的想法是不,因爲如果你通過Eat at Joes Today at 3pm Chronic.parse,它將返回零。它似乎無法識別字符串中用於格式化當前表單中日期的部分。

回答

2

我不會編輯慢性。慢性的唯一功能是解析自然語言日期時間,而不是其他輸入。你可能有興趣在這裏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" 
+0

廢話!從來沒有聽說過鎳。這會很好地工作。謝謝。 – Steve