慢性病是否有任何日期格式选择? (红宝石)

时间:2010-02-23 11:12:18

标签: ruby date chronic

我需要慢慢地告诉我,日期的格式是天 - 月 - 年可能吗?我传给慢性病的数据也可以是今天/昨天/ 2天前的文字。

目前,慢性病给了我2 Dec 2010而非12 Feb 2010

12-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

2 个答案:

答案 0 :(得分:15)

我今天在被问到20个月之后就找到了这个问题。似乎有一种方法可以指示交换月和日。只需使用:endian_precedence选项:

  

:endian_precedence(Array) - 默认值:[:middle,:little] - 默认情况下,   Chronic将解析“03/04/2011”作为第三个月的第四天。   另外,你可以告诉Chronic将其解析为第三天   第四个月将: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 :(得分:3)

慢性的输出可以很容易地格式化。 chronic.parse返回一个时间对象。您可以使用strftime进行格式化here

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

就输入而言,我找不到任何可以自动完成的慢性病。操作输入字符串可能是最佳选择。

编辑:Chronic有一个内部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