0

I have the code below which I am having trouble with. I am trying to get a date string and convert to a date object. Then calculate the days between this date and todays date.

The example below should return "6 days" but instead is returning "35 days".

var tmp = '20/11/2013';
var myDateParts = tmp.split("/");                       
var oneDay = 24*60*60*1000;
var today = new Date();
var secondDate = new Date(myDateParts[2], myDateParts[1], myDateParts[0]);
var diffDays = Math.round(Math.abs((secondDate.getTime() - today.getTime()))/(oneDay));

console.log(diffDays+' days');

Can anyone see where I am going wrong.

Thanks

arbme
  • 4,831
  • 11
  • 44
  • 57

3 Answers3

2

The month is zero based, so 11 means December (and 35 days is the correct difference between today, 14 November 2013, and 20 December 2013).

Change this line:

var secondDate = new Date(myDateParts[2], myDateParts[1], myDateParts[0]);

To this:

var secondDate = new Date(myDateParts[2], parseInt(myDateParts[1])-1, myDateParts[0]);
William
  • 2,695
  • 1
  • 21
  • 33
0

The JavaScript date constructor considers 0 to mean January, 1 to mean February, etc.
So you need to subtract 1 from your 'tmp' month's value before applying getTime.

Joe T
  • 2,300
  • 1
  • 19
  • 31
0

You have an off-by-one error - it looks like months are zero-indexed. See this jsfiddle: http://jsfiddle.net/62YK6/

var tmp = '21/10/2013';
var myDateParts = tmp.split("/");                       
var oneDay = 24*60*60*1000;
var today = new Date();
var secondDate = new Date(myDateParts[2], myDateParts[1], myDateParts[0]);
var diffDays = Math.round(Math.abs((secondDate.getTime() - today.getTime()))/(oneDay));

console.log(secondDate);
console.log(diffDays+' days');
JDP
  • 73
  • 7