2010-02-23 22 views
3

我需要告訴慢性病患者,日期格式是日月年嗎?我傳遞給慢性病的數據也可能是今天/昨天/ 2天前的文字。慢性病患者是否有任何可解析的日期格式選項? (ruby)

目前慢性讓我2 Dec 2010而不是12 Feb 201012-02-2010

我能想到的是字符串傳遞給慢性前交換日和月唯一的解決辦法。

require 'chronic' 

puts "12-02-2010 = #{Chronic.parse('12-02-2010')}" #should be 12 Feb 2010 


puts "yesteday = #{Chronic.parse('yesterday')}" #working ok 
puts "Today = #{Chronic.parse('today')}"  #working ok 
+0

可能你會考慮選擇我的答案爲最佳答案:) – Dorian 2013-12-04 12:07:55

+0

感謝您選擇我的答案爲最佳答案:) – Dorian 2013-12-23 11:31:56

回答

15

我發現這個問題,今天,它已被要求後20個月。似乎有一種方法可以指示交換幾個月和幾天。只需使用:endian_precedence選項:

:endian_precedence(陣列) - 默認值:[:中間:小 - 默認情況下, 慢性將解析「03/04/2011」作爲第三個月的第四天。 或者,你可以在這裏改變:endian_precedence[:little, :middle]

實例告訴慢性第四個月分析此爲 第三天:

Chronic.parse('12-02-2010').strftime('%d %b %Y') #=> 02 Dec 2010 
Chronic.parse('12-02-2010', :endian_precedence => [:little, :median]).strftime('%d %b %Y') #=> 12 Feb 2010 

希望這有助於!

多利安

+1

正是我所期待的。 – Catfish 2012-11-08 19:50:51

+0

我發現的一個問題是,它看起來像Chronic會以不同格式返回日期,如果它無法格式化您要求的方式。例如 Chronic.parse('13/9/14',endian_precedence:[:middle,:little])仍將返回2014年9月13日,而不是解析它。 – ABMagil 2014-06-20 16:28:59

3

慢性的輸出可以很容易地格式化。 chronic.parse返回一個時間對象。您可以使用strftime進行格式化,如here所述。

puts Chronic.parse('today').strftime('%d %b %Y') #=> 23 Feb 2010 

就輸入而言,我找不到任何慢性病,會自動執行。操縱輸入字符串可能是要走的路。

編輯:慢性內部有一個pre_normalize,你可以超馳..

需要「慢性」

puts Chronic.parse('12-02-2010').strftime('%d %b %Y') #=> 02 Dec 2010 

module Chronic 
    class << self 
    alias chronic__pre_normalize pre_normalize 

    def pre_normalize(text) 
     text = text.split(/[^\d]/).reverse.join("-") if text =~ /^\d{1,2}[^\d]\d{1,2}[^\d]\d{4}$/ 
     text = chronic__pre_normalize(text) 
     return text 
    end 
    end 
end 
puts Chronic.parse('12-02-2010').strftime('%d %b %Y') #=> 12 Feb 2010 
+0

@Radek希望這有助於。 – anshul 2010-02-23 12:05:56

+0

太棒了!感謝你 – Radek 2010-02-23 12:08:06

+0

自從這個答案發生以來,事情已經發生了變化。看到我對這個問題的最新解決方案的回答 – Dorian 2012-11-09 09:36:48