Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 是否有它解析的日期格式选项?(红宝石)_Ruby_Date_Chronic - Fatal编程技术网

Ruby 是否有它解析的日期格式选项?(红宝石)

Ruby 是否有它解析的日期格式选项?(红宝石),ruby,date,chronic,Ruby,Date,Chronic,我需要告诉你,日期的格式是天-月-年,这可能吗?我传递给慢性病患者的数据也可能是今天/昨天/两天前的文字 目前慢性病给我的是2010年12月2日,而不是2010年2月12日从2010年2月12日 我能想到的唯一解决办法是在将字符串传递给chronic之前交换日期和月份 chronic的输出可以很容易地格式化chronic.parse返回一个时间对象。您可以使用strftime进行如上所述的格式化 就输入而言,我找不到任何慢性病患者能够自动完成输入。操作输入字符串可能是一种方法 编辑:慢性病有一个

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

目前慢性病给我的是
2010年12月2日
,而不是
2010年2月12日
2010年2月12日

我能想到的唯一解决办法是在将字符串传递给chronic之前交换日期和月份


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

就输入而言,我找不到任何慢性病患者能够自动完成输入。操作输入字符串可能是一种方法

编辑:慢性病有一个内部的
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
puts Chronic.parse('12-02-2010').strftime('%d%b%Y')#=>2010年12月2日
模块慢性
2010年2月12日班

我今天发现了这个问题,在被问了20个月之后。似乎有一种方法可以指示交换月份和天数。只需使用
:endian\u优先级
选项:

:endian_优先级(数组)-默认值:[:中间,:小]-默认情况下, 慢性病将“2011年4月3日”解析为第三个月的第四天。 或者,您可以告诉Chronic将此解析为 第四个月,将
:endian_优先级更改为
[:little,
:中间]

示例如下:

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
希望这有帮助


Dorian

这正是我想要的。我发现的一个问题是,如果它不能按照你要求的方式格式化,它看起来会以不同的格式返回日期。e、 g.Chronic.parse('13/9/14',endian_优先级:[:middle,:little])仍将返回2014年9月13日,而不是解析失败。自给出此答案以来,情况发生了变化。看到我对这个问题的最新解答,也许你会考虑选择我的答案作为最佳答案:谢谢你选择我的答案作为最好的答案:
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
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