Skip to content

Instantly share code, notes, and snippets.

@ashrafuzzaman
Forked from alexisbernard/gist:179712
Created January 13, 2013 16:21
Show Gist options
  • Save ashrafuzzaman/4524907 to your computer and use it in GitHub Desktop.
Save ashrafuzzaman/4524907 to your computer and use it in GitHub Desktop.
# File: config/initializers/date.rb
# Parse date using Rails I18n or Ruby parse method if it failed.
# Reference https://gist.github.com/179712
module DateTimeI18nParser
module ClassMethods
def _parse_with_i18n(str, format = :default)
format ||= :default
date = self._strptime(str, I18n.translate("#{self.name.downcase}.formats.#{format}")) || _parse_without_i18n(str)
date[:year] += increment_year(date[:year].to_i) if date[:year]
date
end
def parse_with_i18n(str, format = :default)
format ||= :default
date = self.strptime(str, I18n.translate("#{self.name.downcase}.formats.#{format}"))
self.new(date.year + increment_year(date.year), date.month, date.day)
rescue ArgumentError
parse_without_i18n(str)
end
def increment_year(year)
if year < 100
year < 30 ? 2000 : 1900
else
0
end
end
end
def self.included(receiver)
receiver.extend ClassMethods
class << receiver
alias_method_chain :_parse, :i18n
alias_method_chain :parse, :i18n
end
end
end
[Date, DateTime].each do |klass|
klass.send :include, DateTimeI18nParser
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment