Date Comparison Problems

I'm trying to compare two dates (one from a database, and the other is
the current date). Here is the code I'm using:

I'm trying to compare two dates (one from a database, and the other is
the current date). Here is the code I'm using:

------
   if document.nil?
     "doc_none"
   elsif document.status == 'archived'
     "doc_archived"
   elsif document.expiration_on < 720.days.ago
     "doc_expired_720"
   elsif document.expiration_on < 360.days.ago
     "doc_expired_360"
   elsif document.expiration_on < 90.days.ago
     "doc_expired_90"
   elsif document.expiration_on < 60.days.ago
     "doc_expired_60"
   elsif document.expiration_on < 30.days.ago
     "doc_expired_30"
   elsif document.expiration_on < 0.days.ago
     "doc_expired"
   elsif document.expiration_on < 30.days.from.now
    "doc_expiring_30"
   elsif document.expiration_on < 60.days.from.now
     "doc_expiring_60"
   else
     "doc_current"
   end
------

So ruby has several classes to do with dates and times.
- Time which is implemented as a number of seconds since an epoch
(usually a 32bit which restricts the range of representable dates)
- Date which is a number of days (with all the niceties to do with
Julian reform, Gregorian reform etc...)
- DateTime which is sort of like Date but which also has time of day
info

date columns on the database comes back as instances of Date, but
0.days.ago etc.. will be instances of Time.
You can convert these around with to_date/to_s.

I might write this as
delta = Date.today - document.expiration_on
case delta
when 720..360 then 'doc_expired_360'
when 360..90 then 'doc_expired_90'

etc...

Fred

I've written it as this:

I've written it as this:

----
def expiration_class(document)

   delta = Date.today - document.expiration_on

   result = case delta
       when 720..360: "doc_expired_360"
       when 360..90: "doc_expired_90"
       when 90..60: "doc_expired_60"
       when 60..30: "doc_expired_30"
       when 30..1: "doc_expired"
       else 'doc_current'
   end

end
end
----

The problem, though, is that it's returning all deltas as
"doc_current",
when I know they're not. Any ideas?

because your ranges are back to front. ranges must be
smallest..largest (check whether you want ... instead of .. i never
remember which is which)

Fred