我需要慢慢地告诉我,日期的格式是天 - 月 - 年可能吗?我传给慢性病的数据也可以是今天/昨天/ 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
答案 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