views:

125

answers:

4

Hi guys,

In flex, I am trying to do date deduction and addition, but couldn't find a way to do it.

e.g.: public var dateNow:Date=new Date();

How can I get the Date 3 months earlier than dateNow?

Thanks!!!

A: 

I don't believe there is built-in Date arithmetic. Even the official adobe documentation for the Date class creates date math from scratch when using it.

Take a look at the above link. The documentation creates a DateMath class with static methods to do the sort of thing you want. Given that, I'm not sure why they didn't make is a part of the standard, but that's the way it is. I'd suggest copying it from there and expanding on it.

tlayton
+3  A: 

Try the DateUtils open source library.

I use it extensively in the Flextras Calendar and it works great. I'm pretty sure there is a DateAdd method. To get a date 3 months earlier, you can just add a negative 3.

http://flexdateutils.riaforge.org/

www.Flextras.com
+3  A: 

You can use the Date constructor for this. The first argument to Date's constructor takes either a year or a timestamp. You can use the Date.time property to get the timestamp from a date object. Once you have the timestamp you can add/subtract some number of seconds from it, and then pass it to new Date(timestamp) and you get a brand new date which represents the new timestamp.

Edit; As a commenter pointed out, time manipulation may not be the best way to go. But you can still use the Date constructor as follows:

var now:Date = new Date();
var threeMonthsAgo = new Date(now.fullYear, 
                              now.month - 3,  
                              now.date, 
                              now.hour, 
                              now.minute, 
                              now.second, 
                              now.millisecond);

The Date constructor is smart enough to deal with negative values, or values greater than 11.

echo
Date math is much more complicated than converting to seconds and adding/subtracting. You have to take time of day, days per month, leap years, time zones, and sometimes different contexts into account.
Sam
Yes, but in case of the month it's not that difficult.
splash
A: 

another alternative is Peter's Dates for lazy people, I love it coming from CF http://blog.flexexamples.com/2007/08/24/date-math-for-lazy-people/

David Collie