我的用户表单中有text_field :birthday_line
,我需要解析用户的birthday
属性。
所以我在User
课程中做了类似的事情。
attr_accessor :birthday_line
before_save :set_birthday
def set_birthday
self.birthday = Date.strptime(birthday_line, I18n.translate("date.formats.default")
end
但问题在于,由于某种原因,当我尝试传入字符串Invalid date
时,它会向我发送错误27 января 1987 г.
,我应该将其解析为1987-01-27
。
我的config/locales/ru.yml
ru:
date:
formats:
default: "%d %B %Y г."
month_names: [~, января, февраля, марта, апреля, мая, июня, июля, августа, сентября, октября, ноября, декабря]
似乎是正确的。
Date.parse
也没有帮助,它只是解析日期编号(27)并将月份和年份放到今天的日期(因此它将是2013年9月27日而不是1987年1月27日)。
答案 0 :(得分:1)
我遇到了同样的问题以及我的建议:
string_with_cyrillic_date = '27 Января 1987'
1)创建像这样的数组
months = [["января", "Jan"], ["февраля", "Feb"], ["марта", "Mar"], ["апреля", "Apr"], ["мая", "May"], ["июня", "Jun"], ["июля", "Jul"], ["августа", "Aug"], ["сентября", "Sep"], ["октября", "Oct"], ["ноября", "Nov"], ["декабря", "Dec"]]
2)现在你可以迭代这个并找到你的西里尔月:
months.each do |cyrillic_month, latin_month|
if string_with_cyrillic_date.match cyrillic_month
DateTime.parse string_with_cyrillic_date.gsub!(/#{cyrillic_month}/, latin_month)
end
end
现在您将收到您期望的日期
27 Jan 1987