2013-11-27 4 views
2

Я ищу способ, где я могу преобразовать дату в более читаемом формате человеческого ... например:преобразования даты в рубине в требуемом формате

12/02/2013 могут быть преобразованы в «2 декабря 2013» 12/03/2013 должен быть преобразован в «3 декабря 2013» 11/27/2013 может быть преобразован в «27 ноябре 2013 года»

ли какая-либо функция в Ruby/Rails легко доступна для использования или мне нужно написать что-то для обработки «st», «nd», «rd» и «th», кроме цифр даты?

+0

проверки этой http://apidock.com/ruby/ DateTime/strftime – shiva

+0

http://stackoverflow.com/questions/165170/in-ruby-on-rails-how-do-i-format-a-date-with-the-th-suffix-as-in-sun- oct-5 – hirolau

+0

Спасибо, я просмотрел strftime(), но не могу найти что-либо в моих потребностях. Я могу получить это, что может помочь мне получить мою форматированную дату, я могу использовать функцию орнализации после парсинга date – Kush

ответ

10

Вы можете попробовать это

t = Time.now() 
t.strftime("#{t.day.ordinalize} %B %Y") 

Это приведет к

27th November 2013 
1

Чтобы форматировать время и даты, вы должны использовать функцию strftime (которая доступна в нескольких языках).

В вашем случае, с минимальными усилиями вы можете достичь некоторые довольно хорошие результаты:

Time.now.strftime("%e %b %Y") #=> "27 Nov 2013" 

Для ordinalization, написать пользовательскую функцию или использовать Rails' ordinalize (как это было предложено ранее).

Вот источник:

def ordinalize(number) 
    if (11..13).include?(number.to_i.abs % 100) 
    "#{number}th" 
    else 
    case number.to_i.abs % 10 
     when 1; "#{number}st" 
     when 2; "#{number}nd" 
     when 3; "#{number}rd" 
     else "#{number}th" 
    end 
    end 
end 
0

Использование: Time.now.strftime ("% A% B % d,% Y ")

=> "Wed November 15, 2013" 

==> today = Time.now 
==> today = today.strftime("%a %B #{t.day.ordinalize}, %Y") 
==> "Wed November 27th, 2013" 
0

Если вы делаете это часто, то штамп камень очень полезен - https://github.com/jeremyw/stamp

Это позволяет делать такие вещи, как:

date = Date.new(2011, 6, 9) 
date.stamp("Sunday, May 1, 2000") #=> "Thursday, June 9, 2011" 
date.stamp("Sun Aug 5")    #=> "Thu Jun 9" 
date.stamp("12/31/99")    #=> "06/09/11" 
date.stamp("DOB: 12/31/2000")  #=> "DOB: 06/09/2011" 
date.stamp("November 5th")   #=> "June 9th" 
date.stamp("1st of Jan")   #=> "9th of Jun" 
Смежные вопросы