Time question

I am writing a small piece that will include a date that needs to be
compared to the current time.

EX. a = Time.now
      b = db_cert_date + (72 months)

      if(a < b)
          do something
      elsif(a > b)
          do something else
      else
          do this
      end

I am looking for the best way to add 72 months onto an old date and
then compare it with the current date. Does anyone have any ideas?

Thanks in advance

joep wrote:

I am writing a small piece that will include a date that needs to be
compared to the current time.

EX. a = Time.now
      b = db_cert_date + (72 months)

Rails's ActiveSupport package lets you say some_date + 72.months. It's that
simple; the secret unit of exchange is probably seconds.

If this were Brand X, using another platform's low-level library would be
eternal torment, but this is Ruby, so just try require 'active_support'!

···

--
Phlip

How 'bout DateTime?
The DateTime#>> operator means "return a new Date object that is n months
later than the current one."

For your code to work db_cert_date would have to be a DateTime, too.

irb(main):018:0> a = DateTime.now
=> #<DateTime: 35342700409548349/14400000000,-1/6,2299161>
irb(main):019:0> puts a.strftime('%m/%d/%Y')
09/10/2007
=> nil
irb(main):020:0> b = a >> 72
=> #<DateTime: 35374265209548349/14400000000,-1/6,2299161>
irb(main):021:0> puts b.strftime('%m/%d/%Y')
09/10/2013
=> nil

···

On 9/10/07, joep <jplantz@gmail.com> wrote:

I am writing a small piece that will include a date that needs to be
compared to the current time.

EX. a = Time.now
      b = db_cert_date + (72 months)

      if(a < b)
          do something
      elsif(a > b)
          do something else
      else
          do this
      end

I am looking for the best way to add 72 months onto an old date and
then compare it with the current date. Does anyone have any ideas?

Thanks in advance

--
Neil Kohl
nakohl@gmail.com

If db_cert_date was a Date, you could do:

  b = db_cert_date >> 72

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

···

On Sep 10, 2007, at 12:25 PM, joep wrote:

I am writing a small piece that will include a date that needs to be
compared to the current time.

EX. a = Time.now
      b = db_cert_date + (72 months)

      if(a < b)
          do something
      elsif(a > b)
          do something else
      else
          do this
      end

I am looking for the best way to add 72 months onto an old date and
then compare it with the current date. Does anyone have any ideas?

Thanks in advance

If you require date, you can do something like:

    if DateTime.now < (Date.parse(some_date_string.to_s) >> 72 )
  puts 'Pay up, chump!'
    end

There may be a more elegant way, but this would get the job done.

···

On Tue, Sep 11, 2007 at 01:25:04AM +0900, joep wrote:

I am writing a small piece that will include a date that needs to be
compared to the current time.

--
"Oh, look: rocks!"
  -- Doctor Who, "Destiny of the Daleks"

Only problem is I'm not using rails. Just straight ruby as a cgi.

···

On Sep 10, 10:03 am, Phlip <phlip2...@gmail.com> wrote:

joep wrote:
> I am writing a small piece that will include a date that needs to be
> compared to the current time.

> EX. a = Time.now
> b = db_cert_date + (72 months)

Rails's ActiveSupport package lets you say some_date + 72.months. It's that
simple; the secret unit of exchange is probably seconds.

If this were Brand X, using another platform's low-level library would be
eternal torment, but this is Ruby, so just try require 'active_support'!

--
Phlip

Depending on how accurate you actually want, active_support's 72.months
assumes 30 days in a month. Here's a quick comparison of adding 72
months in different libraries:

    % cat time-test.rb
    #!/usr/bin/env ruby
    require 'rubygems'
    require 'active_support'
    require 'chronic'

    today_time = Time.now
    today_dt = DateTime.now
    format = "%Y-%m-%d %H:%M:%S"
    puts "Calculate the date of 72 months from today : #{today_time.strftime(format)}"
    puts "ActiveSupport (today (Time) + 72.months) : #{(today_time + 72.months).strftime(format)}"
    puts "ActiveSupport (today (Time) + 6.years) : #{(today_time + 6.years).strftime(format)}"
    puts "Chronic.parse '72 months from now' : #{Chronic.parse('72 months from now').strftime(format)}"
    puts "DateTime.now >> 72 : #{(today_dt >> 72).strftime(format)}"

    % ruby time-test.rb
    Calculate the date of 72 months from today : 2007-09-10 11:32:14
    ActiveSupport (today (Time) + 72.months) : 2013-08-09 11:32:14
    ActiveSupport (today (Time) + 6.years) : 2013-09-09 23:32:14
    Chronic.parse '72 months from now' : 2013-09-10 11:32:14
    DateTime.now >> 72 : 2013-09-10 11:32:14

As you can see, there is some disparity. From my perspective, the only ones of
these that are actually correct are the Chronic and the DateTime ones.

Is there a really good date calculation library in ruby that I'm missing?

enjoy,

-jeremy

···

On Tue, Sep 11, 2007 at 01:35:08AM +0900, Phlip wrote:

joep wrote:

> I am writing a small piece that will include a date that needs to be
> compared to the current time.
>
> EX. a = Time.now
> b = db_cert_date + (72 months)

Rails's ActiveSupport package lets you say some_date + 72.months. It's that
simple; the secret unit of exchange is probably seconds.

If this were Brand X, using another platform's low-level library would be
eternal torment, but this is Ruby, so just try require 'active_support'!

--

Jeremy Hinegardner jeremy@hinegardner.org

Thanks Rob. This did work quite the way I wanted it to but I think
with a little playing around I can get it. Thanks for the direction.

···

On Sep 10, 12:59 pm, Rob Biedenharn <R...@AgileConsultingLLC.com> wrote:

On Sep 10, 2007, at 12:25 PM, joep wrote:

> I am writing a small piece that will include a date that needs to be
> compared to the current time.

> EX. a = Time.now
> b = db_cert_date + (72 months)

> if(a < b)
> do something
> elsif(a > b)
> do something else
> else
> do this
> end

> I am looking for the best way to add 72 months onto an old date and
> then compare it with the current date. Does anyone have any ideas?

> Thanks in advance

If db_cert_date was a Date, you could do:

        b = db_cert_date >> 72

-Rob

Rob Biedenharn http://agileconsultingllc.com
R...@AgileConsultingLLC.com- Hide quoted text -

- Show quoted text -

You don't have to be using rails you just need the active_support gem
installed.

gem install activesupport

After that just require 'active_support' as Phlip said.

···

On 9/10/07, joep <jplantz@gmail.com> wrote:

On Sep 10, 10:03 am, Phlip <phlip2...@gmail.com> wrote:
> joep wrote:
> > I am writing a small piece that will include a date that needs to be
> > compared to the current time.
>
> > EX. a = Time.now
> > b = db_cert_date + (72 months)
>
> Rails's ActiveSupport package lets you say some_date + 72.months. It's
that
> simple; the secret unit of exchange is probably seconds.
>
> If this were Brand X, using another platform's low-level library would
be
> eternal torment, but this is Ruby, so just try require 'active_support'!
>
> --
> Phlip

Only problem is I'm not using rails. Just straight ruby as a cgi.

--
"Hey brother Christian with your high and mighty errand, Your actions speak
so loud, I can't hear a word you're saying."

-Greg Graffin (Bad Religion)

joep wrote:

···

On Sep 10, 10:03 am, Phlip <phlip2...@gmail.com> wrote:

joep wrote:

I am writing a small piece that will include a date that needs to be
compared to the current time.
EX. a = Time.now
      b = db_cert_date + (72 months)

Rails's ActiveSupport package lets you say some_date + 72.months. It's that
simple; the secret unit of exchange is probably seconds.

If this were Brand X, using another platform's low-level library would be
eternal torment, but this is Ruby, so just try require 'active_support'!

--
Phlip

Only problem is I'm not using rails. Just straight ruby as a cgi.

Phlip's point was that you can use active_support without using rails:

    gem install activesupport

cheers,
mick