Gihan Lasita
Gihan Lasita

Reputation: 3053

What is wrong with this javascript date difference calculate function?

Any idea why this function doesn't work properly in Internet Explorer?

function days_between(check_in, check_out)
{
    var oneDay = 24*60*60*1000; 
    var firstDate = new Date(check_in);
    var secondDate = new Date(check_out);    
    var diffDays = Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay));
    return diffDays;
}

in internet explorer it shows NaN as result.

im calling this function in this date format

var check_in = "2012-02-09";
var check_out = "2012-02-12"; 
var range = days_between(check_in, check_out);

Regards

Upvotes: 0

Views: 1720

Answers (4)

Feysal
Feysal

Reputation: 623

You are giving the date arguments in an incorrect format. You can expect javascript to support these formats:

MM-dd-yyyy
yyyy/MM/dd
MM/dd/yyyy
MMMM dd, yyyy
MMM dd, yyyy

To fix your immediate problem, you can use replace() to format your arguments.

function days_between(check_in, check_out)
{
    var firstDate = new Date(check_in.replace('-' , '/'));
    var secondDate = new Date(check_out.replace('-' , '/'));    
    var diffDays = Math.abs((firstDate.getTime() - secondDate.getTime()) / 86400000);
    return diffDays;
}

And by the way, you can replace oneDay with a constant.

Upvotes: 0

Jonathan M
Jonathan M

Reputation: 17451

The date format you're passing (yyyy-mm-dd) isn't supported by Date. See the note here that says it must be in a format parsable by parse. See here for acceptable parse formats: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse

Upvotes: 1

Esailija
Esailija

Reputation: 140228

IE doesn't support Date.parse or passing "2012-02-09" (with ISO dates) to new Date, you need to parse it yourself and pass new Date( 2012, 1, 9 ) or use a Date.parse shim for ISO dates

Upvotes: 2

Dor Cohen
Dor Cohen

Reputation: 17090

You have problem in creating the Date Object

Date objects are created with the Date() constructor.

There are four ways of instantiating a date:

new Date() // current date and time
new Date(milliseconds) //milliseconds since 1970/01/01
new Date(dateString)
new Date(year, month, day, hours, minutes, seconds, milliseconds)

Most parameters above are optional. Not specifying, causes 0 to be passed in.

Once a Date object is created, a number of methods allow you to operate on it. Most methods allow you to get and set the year, month, day, hour, minute, second, and milliseconds of the object, using either local time or UTC (universal, or GMT) time.

All dates are calculated in milliseconds from 01 January, 1970 00:00:00 Universal Time (UTC) with a day containing 86,400,000 milliseconds.

Some examples of instantiating a date:

var today = new Date()
var d1 = new Date("October 13, 1975 11:13:00")
var d2 = new Date(79,5,24)
var d3 = new Date(79,5,24,11,33,0)

(Taken from http://www.w3schools.com/js/js_obj_date.asp)

Upvotes: 1

Related Questions