3

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

目前慢性给我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
4

2 回答 2

16

我今天发现了这个问题,在它被问到 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

希望这可以帮助!

多里安

于 2011-10-28T15:17:41.050 回答
3

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

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
于 2010-02-23T11:37:57.333 回答