есть ли у хроники какие-либо опции формата даты, которые она анализирует? (Рубин) - PullRequest
3 голосов
/ 23 февраля 2010

Мне нужно сообщить хроническому, что формат даты день-месяц-год это возможно? Данные, которые я передаю хроническому, также могут быть словами сегодня / вчера / 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 ]

15 голосов
/ 28 октября 2011

Я нашел этот вопрос сегодня, через 20 месяцев после того, как он был задан. Кажется, есть способ указать, чтобы поменять местами месяцы и дни. Просто используйте опцию :endian_precedence:

: endian_precedence (Array) - по умолчанию: [: middle,: little] - по умолчанию, Хроник будет разбирать «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

Надеюсь, это поможет!

Dorian

3 голосов
/ 23 февраля 2010

Вывод хроники может быть легко отформатирован. chronic.parse возвращает объект времени. Вы можете использовать strftime для форматирования, как описано здесь .

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