通过jQuery在IE中计算时间戳 - 不起作用



我对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);

在其他现代浏览器(火狐,歌剧,铬)上,一切正常。仅在IE上,我获得了timestamp1timestamp2中的" NaN"值。

谢谢建议。

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

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

如果您确保以这种格式传递参数,则一切应该正常工作。您将在此处找到工作代码:http://jsfiddle.net/utXMD/

在你的代码中:

> 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 ed 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构造函数的工作原理并直接使用它,而不是尝试创建必须解析它们的字符串。

遇到了问题,并且能够在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);

最新更新