这个javascript日期差异计算功能有什么问题?

时间:2012-02-09 15:43:36

标签: javascript

知道为什么这个功能在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;
}

在Internet Explorer中,它显示 NaN

我以这种日期格式调用此函数

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

此致

4 个答案:

答案 0 :(得分:2)

IE不支持Date.parse或将"2012-02-09"(带ISO日期)传递给new Date,您需要自己解析并传递new Date( 2012, 1, 9 )或使用{{ 3}}

答案 1 :(得分:1)

您在创建日期对象时遇到问题

使用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)

以上大多数参数都是可选的。未指定,导致传入0。

创建Date对象后,可以使用许多方法对其进行操作。大多数方法允许您使用本地时间或UTC(通用或GMT)时间来获取和设置对象的年,月,日,小时,分钟,秒和毫秒。

所有日期均以毫秒为单位,从世界时间1970年1月1日00:00:00(UTC)开始,每天包含86,400,000毫秒。

实例化日期的一些例子:

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)

(取自http://www.w3schools.com/js/js_obj_date.asp

答案 2 :(得分:1)

Date不支持您传递的日期格式(yyyy-mm-dd)。请参阅说明here,说明它必须采用parse可解析的格式。请参阅此处了解可接受的解析格式:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse

答案 3 :(得分:0)

您以不正确的格式提供日期参数。您可以期望javascript支持这些格式:

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

要解决您的问题,您可以使用replace()格式化参数。

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;
}

顺便说一下,你可以用常数替换oneDay。