我对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上,我在timestamp1
和timestamp2
中获得了“NaN”值。
感谢您的建议。
答案 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如何工作并直接使用它,而不是尝试创建一个必须解析它们的字符串。