Calculating a future date

T

Toine

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
 
F

Farrel Lifson

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

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

Farrel
 
S

Sharon Phillips

Hi,

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

Cheers,
Dave
 
T

Toine

Hi,

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

Cheers,
Dave

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

Thanks for your help.
 
T

Toine

Hi,

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

Cheers,
Dave

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

Thanks for your help.
 
A

Alexandru E. Ungur

sender: "Toine" date: "Tue, Feb 06, 2007 at 08:00:06PM +0900" <<<EOQ
Date.today + 31 and Time.now + 31*24*60*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
 
R

Rob Biedenharn

require 'date'

puts Date.today
puts Date.today + 100
puts Time.now
puts Time.now + 100*24*60*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 + 100*60*60 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.

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 + 100*24*60*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 Biedenharn http://agileconsultingllc.com
(e-mail address removed)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top