Есть ли у хроники какие-либо опции формата даты, которые она анализирует? (Рубин)

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

Решение

Я нашел этот вопрос сегодня, через 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

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

Дориан

Вывод хроники может быть легко отформатирован. 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
Другие вопросы по тегам