3

日付の形式が日月年であることを慢性的に伝える必要がありますか? クロニックに渡すデータは、今日/昨日/2 日前の単語でもかまいません。

現在、慢性的なものでは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 (配列) — デフォルト: [:middle, :little] — デフォルトでは、Chronic は "03/04/2011" を 3 か月目の 4 日として解析します。または、Chronic に to を変更して、これを 4 か月目の 3 日として解析するように指示することもできます: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時間オブジェクトを返します。here で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 に答える