Skip to main content
Known Participant
July 10, 2009
Answered

Strange things happening

  • July 10, 2009
  • 1 reply
  • 752 views

Running the function below gives:

Current date--> Sat Jul 11 01:35:36 GMT+0200 2009
Due date------> Thu Jan 1 15:53:40 GMT+0200 2009
Days overdue--> 41

The Days overdue are NOT 41 (from Jan 15, 2009 to July 11,2009).

What am I doing wrong?

function overDueBy(dueDate:Date):String{

   

   var millisecondsPerDay:int = 1000 * 60 * 60 * 24;


   var milliseconds:uint= ((new Date()).getTime() - dueDate.getTime());


   trace("Current date--> "+new Date());


   trace("Due date------> "+dueDate);


   trace("Days overdue--> "+Math.round(milliseconds/(millisecondsPerDay)));

  }

This topic has been closed for replies.
Correct answer kglad
use:

function overDueBy(dueDate:Date):String{

   var millisecondsPerDay:int = 1000 * 60 * 60 * 24;


   var milliseconds:Number= ((new Date()).getTime() - dueDate.getTime());


   trace("Current date--> "+new Date());


   trace("Due date------> "+dueDate);


   trace("Days overdue--> "+Math.round(milliseconds/(millisecondsPerDay)));

  }

1 reply

kglad
Community Expert
kgladCommunity ExpertCorrect answer
Community Expert
July 11, 2009
use:

function overDueBy(dueDate:Date):String{

   var millisecondsPerDay:int = 1000 * 60 * 60 * 24;


   var milliseconds:Number= ((new Date()).getTime() - dueDate.getTime());


   trace("Current date--> "+new Date());


   trace("Due date------> "+dueDate);


   trace("Days overdue--> "+Math.round(milliseconds/(millisecondsPerDay)));

  }

MwalimoAuthor
Known Participant
July 11, 2009

Thanks very much. How was I supposed to know that.....without you to help? Thanks again.

kglad
Community Expert
Community Expert
July 11, 2009

yes, that's a tricky one.

the uint class handles numbers from 0 to (2**32)-1  and any recent date.getTime() is going to exceed 2**32.

once a number exceeds 2**32, it wraps to 0 and then starts increasing again.

i think your date.getTime() is about 300 x's larger than the largest uint.