#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
Строка
"2011-05-19 10:30:14"
Для
Thu May 19 10:30:14 UTC 2011
Как я могу преобразовать конкретную строку в этот формат даты?
Ответ №1:
require 'date'
date = DateTime.parse("2011-05-19 10:30:14")
formatted_date = date.strftime('%a %b %d %H:%M:%S %Z %Y')
Смотрите strftime() для получения дополнительной информации о форматировании дат.
Ответ №2:
"2011-05-19 10:30:14".to_time
Комментарии:
1. Я получаю NoMethodError … какие модули вы загружаете?
2. @mrek этот метод определен в rails или, более конкретно, в String extension activesupport. Вы можете
require 'active_support/core_ext/string'
получить это. Смотрите apidock.com/rails/String/to_time3. Хотя это может дать ответ на вопрос, пожалуйста, не публикуйте ответы только для кода.
Ответ №3:
Не нужно ничего применять. Просто добавьте этот код в конец переменной, которой назначена дата. Например
@todaydate = "2011-05-19 10:30:14"
@todaytime.to_time.strftime('%a %b %d %H:%M:%S %Z %Y')
Вы получите правильный формат, какой вам нравится. Вы можете проверить это в консоли Rails
Loading development environment (Rails 3.0.4)
ruby-1.9.2-p136 :001 > todaytime = "2011-05-19 10:30:14"
=> "2011-05-19 10:30:14"
ruby-1.9.2-p136 :002 > todaytime
=> "2011-05-19 10:30:14"
ruby-1.9.2-p136 :003 > todaytime.to_time
=> 2011-05-19 10:30:14 UTC
ruby-1.9.2-p136 :008 > todaytime.to_time.strftime('%a %b %d %H:%M:%S %Z %Y')
=> "Thu May 19 10:30:14 UTC 2011"
Попробуйте gem ‘date_format‘, чтобы отобразить дату в другом формате.
Ответ №4:
Другие форматы:
require 'date'
date = "01/07/2016 09:17AM"
DateTime.parse(date).strftime("%A, %b %d")
#=> Friday, Jul 01
DateTime.parse(date).strftime("%m/%d/%Y")
#=> 07/01/2016
DateTime.parse(date).strftime("%m-%e-%y %H:%M")
#=> 07- 1-16 09:17
DateTime.parse(date).strftime("%b %e")
#=> Jul 1
DateTime.parse(date).strftime("%l:%M %p")
#=> 9:17 AM
DateTime.parse(date).strftime("%B %Y")
#=> July 2016
DateTime.parse(date).strftime("%b %d, %Y")
#=> Jul 01, 2016
DateTime.parse(date).strftime("%a, %e %b %Y %H:%M:%S %z")
#=> Fri, 1 Jul 2016 09:17:00 0200
DateTime.parse(date).strftime("%Y-%m-%dT%l:%M:%S%z")
#=> 2016-07-01T 9:17:00 0200
DateTime.parse(date).strftime("%I:%M:%S %p")
#=> 09:17:00 AM
DateTime.parse(date).strftime("%H:%M:%S")
#=> 09:17:00
DateTime.parse(date).strftime("%e %b %Y %H:%M:%S%p")
#=> 1 Jul 2016 09:17:00AM
DateTime.parse(date).strftime("%d.%m.%y")
#=> 01.07.16
DateTime.parse(date).strftime("%A, %d %b %Y %l:%M %p")
#=> Friday, 01 Jul 2016 9:17 AM
Ответ №5:
Это еще один полезный код:
"2011-05-19 10:30:14".to_datetime.strftime('%a %b %d %H:%M:%S %Z %Y')
Ответ №6:
Использовать преобразования даты DATE_FORMAT
из :
В вашем инициализаторе:
DateTime::DATE_FORMATS[:my_date_format] = "%a %b %d %H:%M:%S %Z %Y"
На ваш взгляд:
date = DateTime.parse("2011-05-19 10:30:14")
date.to_formatted_s(:my_date_format)
date.to_s(:my_date_format)
Ответ №7:
<%= string_to_datetime("2011-05-19 10:30:14") %>
def string_to_datetime(string,format="%Y-%m-%d %H:%M:%S")
DateTime.strptime(string, format).to_time unless string.blank?
end