我对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上,我获得了timestamp1
和timestamp2
中的" 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);