FuzzyDate is a Ruby Class for working with incomplete dates.
install gem
gem install fuzzy_date
There is also an extension to the ActiveRecord::Base class to provide an 'acts_as_fuzzy_date' class method
Historical dates are often incomplete or approximate and this class allows
such dates to be worked with and stored on a database.
FuzzyDate.new( year,month,day,wday,circa)
year: optional..is the year number 0 .. big as you like, -ve for BCE
month: optional.. is month number 1..12, or nil
day: optional.. is day number 1-31 or nil
wday: optional.. day of the week - 0=Sunday .. 6=Saturday
circa: true = daye is approx, or nil/false
note that if you supply the weekday and a year/month/day the system will
use your weekday as supplied even if this does not actually correspond
in reality to the date supplied.
FuzzyDate.parse("date_string") date_string = eg: "tuesday"
"12 nov 1012"
"circa 412 bc"
Use in a database table by storing in an integer field of a format large
enough to hold the digits of your maximum year + 8. Eg. a BIGNUM field
stores 19 useful characters allowing the year to go to 99,999,999,999.
ie 99 billion years.
Use with an ActiveRecord class ..
require 'fuzzy_date'
class HistoricalPerson < ActiveRecord::Base
acts_as_fuzzy_date : birth_date, death_date
end