I found a solution to the problem of month/day ordering by overriding the autocasting code in ActiveRecord. However, that didn't solve the problem more generally. So I came up with a nicer solution that uses the existing Date::Format._parse_sla_eu
method. It replaces the US year/month/day parsing method with the European one.
# Overrides the default Date::_parse() method for dates of format dd/mm/yyyy
# ParseDate does the typical American thing and assumes mm/dd/yyy and
# doesn't seem to be configurable
module Date::Format::EuropeanDates
def self.included(base)
base.class_eval do
class << self
alias_method :_parse_sla_us, :_parse_sla_eu
end
end
end
end
Date.send(:include, Date::Format::EuropeanDates)
With thanks to Simon who showed me how to replace static methods. This is the kind of wacky stuff you could never do with PHP. Not that we should want to. It's kind of ridiculous.
[…] I found a better solution that changes the date parsing code […]
Fat Vegan › Rails autocasting date strings with wrong day month order / 10:36pm / 12 June 2008
For Ruby 1.8.7 it seems to be changed to:
alias_method :_parse_us, :_parse_eu
Kamil Kukura / 9:44pm / 6 January 2009