通过jQuery计算IE中的时间戳 - 不工作

时间:2012-08-06 12:09:36

标签: javascript jquery internet-explorer timestamp

我对IE(所有版本)都有一些问题。它不计算时间戳的代码。我的代码如下:

function compute() {
    var c = $('select#time_from_hour').val();
    var d = $('select#time_from_minute').val();
    var e = $('select#time_to_hour').val();
    var f = $('select#time_to_minute').val();
    var g = $('input#date_from').val();
    var h = $('input#date_to').val();
    var hour1 = g + ' ' + c + ':' + d; 
    var hour2 = h + ' ' + e + ':' + f; 

    hour1 = hour1.split("/"); 
    var hour1 = hour1[1] + "," + hour1[0] + "," + hour1[2];
    var timestamp = (new Date(hour1).getTime() / 1000) + 7200;
    $('#total_hour1').val(timestamp);

    hour2 = hour2.split("/"); 
    var hour2 = hour2[1] + "," + hour2[0] + "," + hour2[2];
    var timestamp = (new Date(hour2).getTime() / 1000) + 7200;
    $('#total_hour2').val(timestamp);

    var x = -$('input#total_hour1').val();
    var y = -$('input#total_hour2').val();
    var total_time = x - y; 
    result = total_time / 86400;
    new_number = Math.ceil(result); 

    if (isNaN(new_number)) { 
        var new_number = 0;
    }

    $('#finish_day').val(new_number);
}

$('select#time_from_hour').change(compute);
$('select#time_from_minute').change(compute);
$('select#time_to_hour').change(compute);
$('select#time_to_minute').change(compute);
// $('select#return_car').change(compute);
$('select#get_car').change(compute);
$('input#finish_day').change(compute);

在其他现代浏览器(firefox,opera,chrome)上一切正常。仅在IE上,我在timestamp1timestamp2中获得了“NaN”值。

感谢您的建议。

3 个答案:

答案 0 :(得分:1)

您似乎以错误的格式传递Date - 构造函数的参数。根据{{​​3}},Date的IE实施按以下顺序接受日期:

function Date( year : int, month : int, date : int[, hours : int [, minutes : int [, seconds : int [, ms : int]]]] )

如果你确定,你以这种格式传递参数,一切都应该可以正常工作。您可以在此处找到正在运行的代码: MSDN

答案 1 :(得分:0)

遇到问题并且能够在IE中运行您的代码。

var hour1 = g + ' ' + c + ':' + d; 
var hour2 = h + ' ' + e + ':' + f; 

hour1 = hour1.split("/"); 
var hour1 = hour1[1] + "," + hour1[0] + "," + hour1[2];
var timestamp = (new Date(hour1).getTime() / 1000) + 7200;

无需拆分hour1,只需传递相同的时间来计算时间戳。 下面的代码工作

var hour1 = g + ' ' + c + ':' + d;
var hour2 = h + ' ' + e + ':' + f;

//    var hour1 = hour11.split("/");
//  hour1 = hour1[1]+","+hour1[0]+","+hour1[2];
var timestamp = (new Date(hour1).getTime()/1000) + 7200;
$('#total_hour1').val(timestamp);

答案 2 :(得分:0)

在您的代码中:

> function compute() {
>     var c = $('select#time_from_hour').val();
>     var d = $('select#time_from_minute').val();
>     var e = $('select#time_to_hour').val();
>     var f = $('select#time_to_minute').val();
>     var g = $('input#date_from').val();
>     var h = $('input#date_to').val();
>     var hour1 = g + ' ' + c + ':' + d;
>     var hour2 = h + ' ' + e + ':' + f; 
>
>     hour1 = hour1.split("/"); 
>     var hour1 = hour1[1] + "," + hour1[0] + "," + hour1[2];

据推测,上面会产生一个字符串:

day/month/year h:m:s

不保证任何浏览器都能正确解析。在ECMA-262第3版中,日期字符串的解析完全取决于实现。在ES5中指定了ISO8601格式的修改版本,但并非所有浏览器都支持。上述字符串也不符合该格式。

>     var timestamp = (new Date(hour1).getTime() / 1000) + 7200;

这似乎是尝试从时间戳创建一个自纪元号以来的秒数。最好使用已有的日期和时间,例如:

// Presuming g is in the format day/month/year
g = g.split("/");
var someDate = new Date(+g[2], --g[1], +g[0], +c, +d + 2); // add 2 hours here
var timestamp = Math.round(someDate/1000);

我建议您查看Date constructor如何工作并直接使用它,而不是尝试创建一个必须解析它们的字符串。