# Date math makes me crazy

**URL:** <https://www.ruby-forum.com/t/date-math-makes-me-crazy/186774>\
**Category:** Rails\
**Created:** [February 25, 2008, 11:52pm UTC](https://www.ruby-forum.com/t/date-math-makes-me-crazy/186774 "2008-02-25T23:52:55Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![craigrails](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/c2a13f/32.png) [@craigrails](https://www.ruby-forum.com/u/craigrails)\
**Post date:** [February 25, 2008, 11:52pm UTC](https://www.ruby-forum.com/t/date-math-makes-me-crazy/186774/1 "2008-02-25T23:52:55Z")

</div>

I just don’t understand this and leap years make this problem obvious to  
me…

> > test = DateTime.now  
> > =\> #\<DateTime: 53017684949923739/21600000000,-7/24,2299161\>
> 
> > test.strftime("%Y-%m-%d")  
> > =\> “2008-02-25”

> > test = DateTime.now + 365  
> > =\> #\<DateTime: 70700758603797619/28800000000,-7/24,2299161\>
> 
> > test.strftime("%Y-%m-%d")  
> > =\> “2009-02-24”

seems reasonable, off a day because of leap year…

> > test = DateTime.now + 1.year  
> > =\> #\<DateTime: 1469323689922559749/43200000000,-7/24,2299161\>
> 
> > test.strftime("%Y-%m-%d")  
> > =\> “88409-12-04”

how do I add a simple year?

Craig

---

<div class="post-metadata">

**Author:** ![craigrails](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/c2a13f/32.png) [@craigrails](https://www.ruby-forum.com/u/craigrails)\
**Post date:** [February 25, 2008, 11:58pm UTC](https://www.ruby-forum.com/t/date-math-makes-me-crazy/186774/2 "2008-02-25T23:58:10Z")

</div>

Craig W. wrote:

> how do I add a simple year?
> 
> Craig

I did DateTime.now.year will give 2008. DateTime.now.year + 1 give 2009

---

<div class="post-metadata">

**Author:** ![craigrails](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/c2a13f/32.png) [@craigrails](https://www.ruby-forum.com/u/craigrails)\
**Post date:** [February 26, 2008, 12:04am UTC](https://www.ruby-forum.com/t/date-math-makes-me-crazy/186774/3 "2008-02-26T00:04:42Z")

</div>

On 25 Feb 2008, at 23:52, Craig W. wrote:

> =\> #\<DateTime: 70700758603797619/28800000000,-7/24,2299161\>  
> how do I add a simple year?  
> Time.now.next\_year

Don’t use DateTime.

Best regards

Peter De Berdt

---

<div class="post-metadata">

**Author:** ![craigrails](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/c2a13f/32.png) [@craigrails](https://www.ruby-forum.com/u/craigrails)\
**Post date:** [February 26, 2008, 12:11am UTC](https://www.ruby-forum.com/t/date-math-makes-me-crazy/186774/4 "2008-02-26T00:11:44Z")

</div>

On Feb 25, 2008, at 4:52 PM, Craig W. wrote:

> > > test = DateTime.now + 365
> 
> how do I add a simple year?
> 
> Craig

Hi Craig,

You might find this interesting:

> **[\#54 Debugging with ruby-debug - RailsCasts](http://railscasts.com/episodes/54-debugging-with-ruby-debug)**
>
> Short Ruby on Rails screencasts containing tips, tricks and tutorials. Great for both novice and experienced web developers.

Peace,  
Phillip

---

<div class="post-metadata">

**Author:** ![craigrails](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/c2a13f/32.png) [@craigrails](https://www.ruby-forum.com/u/craigrails)\
**Post date:** [February 26, 2008, 12:11am UTC](https://www.ruby-forum.com/t/date-math-makes-me-crazy/186774/5 "2008-02-26T00:11:09Z")

</div>

On Tue, 2008-02-26 at 00:03 +0100, Peter De Berdt wrote:

> > > >
> > 
> > how do I add a simple year?
> 
> Time.now.next\_year
> 
> Don’t use DateTime.

* * *

gotcha…

this is really painful,  
test = ((DateTime.now.year + 1).to\_s + “-” + DateTime.now.month.to\_s +  
“-” + DateTime.now.day.to\_s).to\_date

but I do need dates so I have to convert back to a date but thankfully,  
that isn’t so hard to do.

Thanks

Craig

---

<div class="post-metadata">

**Author:** ![craigrails](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/c2a13f/32.png) [@craigrails](https://www.ruby-forum.com/u/craigrails)\
**Post date:** [February 26, 2008, 12:15am UTC](https://www.ruby-forum.com/t/date-math-makes-me-crazy/186774/6 "2008-02-26T00:15:17Z")

</div>

On Feb 25, 2008, at 6:03 PM, Peter De Berdt wrote:

> > > > test = DateTime.now + 365
> > 
> > how do I add a simple year?
> 
> Time.now.next\_year
> 
> Don’t use DateTime.
> 
> Best regards
> 
> Peter De Berdt

Well, since DateTime \< Date, you can

test \>\>= 12

to advance test by 12 months. (and if you try in 4 days (on  
2008-02-29), the result will be 2009-02-28 😉

But you probably want either a Date or a Time anyway.

-Rob

Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
removed\_email\_address@domain.invalid
