Calculating a future date

Hello,

I’m new to Ruby so please bare with me…

I need to calculate a date that is exactly 31 days from the current
date in YYYY-MM-DD format. I know that Date.today returns the
current date, but how can I add 31 days to this value? I’m sure this
task is simple, but I haven’t been able to figure it out.

Thanks

On 06/02/07, Toine [email protected] wrote:

Time now + number of seconds in 31 days
Time.now + 312460*60
which is equivalent to
Time.now + 2678400

Farrel

Hi,

This is something that took me ages to figure out because it is so
simple :slight_smile:
Just add the number of days, eg future_date= Date.today+31

Cheers,
Dave

On Feb 6, 2:47 am, Sharon P. [email protected] wrote:

Thanks

Time now + number of seconds in 31 days
Time.now + 312460*60
which is equivalent to
Time.now + 2678400

Farrel

Date.today + 31 and Time.now + 312460*60 yield the same results.

Thanks for your help.

sender: “Toine” date: “Tue, Feb 06, 2007 at 08:00:06PM +0900” <<<EOQ
Date.today + 31 and Time.now + 312460*60 yield the same results.
Just beware that although they yield the same result they do it at
very different speeds:

~>> cat date_vs_time.rb
require ‘benchmark’
require ‘date’

n = 100_000
Benchmark.bm do |x|
x.report { n.times do a = Date.today+31; end }
x.report { n.times do a = Time.now+2678400; end }
end

~>> ruby date_vs_time.rb
user system total real
24.300000 0.760000 25.060000 ( 31.808122)
0.410000 0.440000 0.850000 ( 0.971718)

So, whenever you can get away with Time, use it. Only use Date when
you have to.

Cheers,
Alex

On 2/6/07, Alexandru E. Ungur [email protected] wrote:

n = 100_000

So, whenever you can get away with Time, use it. Only use Date when
you have to.

Cheers,
Alex

require ‘date’

puts Date.today
puts Date.today + 100
puts Time.now
puts Time.now + 1002460*60

2007-02-08
2007-05-19
Thu Feb 08 22:05:49 W. Europe Standard Time 2007
Sat May 19 23:05:49 W. Europe Daylight Time 2007

Looks innocent enough, but when I run the same program again in 60
minutes,
Time.now + 1006060 would output:
Sun May 20 00:05:49 W. Europe Daylight Time 2007 (which is my birthday
by
the way).

So from a correctness point of view, use Date when you are dealing with
dates,
and use Time when you are dealing with time.

On Feb 8, 2007, at 4:17 PM, Johan Veenstra wrote:

require ‘date’
24.300000 0.760000 25.060000 ( 31.808122)

Thu Feb 08 22:05:49 W. Europe Standard Time 2007
with
dates,
and use Time when you are dealing with time.

Assuming you want to (or need to) use Time, then you can… if you
use ActiveSupport

#!/usr/bin/env ruby -w
require ‘rubygems’
gem ‘activesupport’, ‘>=1.4’

require ‘date’
puts “with Date:”
puts “today: #{Date.today}”
puts “+ 100: #{Date.today + 100}”
puts “with Time:”
puts " now: #{Time.now}"
puts “+ 8_640_000: #{Time.now + 1002460*60}”

puts “Time with some ActiveSupport from those Rails guys:”
require ‘active_support’
puts " now: #{Time.now}"
puts " + 100.days: #{Time.now + 100.days}"
puts “in 100.days: #{Time.now.in(100.days)}”
END

with Date:
today: 2007-02-08

  • 100: 2007-05-19
    with Time:
    now: Thu Feb 08 17:11:43 -0500 2007
  • 8_640_000: Sat May 19 18:11:43 -0400 2007
    Time with some ActiveSupport from those Rails guys:
    now: Thu Feb 08 17:11:43 -0500 2007
    • 100.days: Sat May 19 18:11:43 -0400 2007
      in 100.days: Sat May 19 17:11:43 -0400 2007

Notice that the last line has recognized (and corrected for) the
Daylight Savings transition

-Rob

Rob B. http://agileconsultingllc.com
[email protected]