2012-08-06 87 views
0

我有一些问题与IE浏览器(所有版本)。它不计算时间戳的代码。我的代码如下:的jQuery计算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”值。

感谢您的建议。

+0

请还添加HTML,所以我们可以测试。 – 2012-08-06 12:12:26

+0

这里是代码:http://jsfiddle.net/EbdFY/13/ – Adrian 2012-08-06 12:15:40

回答

1

你似乎传递Date -Constructor的参数格式错误。据MSDNDate的IE,执行接受以下顺序日期:

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

如果你确保,你传递参数以这种格式,一切都应该正常工作。你会发现这里的工作代码: http://jsfiddle.net/utXMD/

+0

谢谢你的提示 - 只有一个多的问题 - 低于市1城2我得到了场“方向”,并在IE中我看到所有方向,并且应该只看到3方向1号, 3号方向 - 在其他浏览器上一切正常 – Adrian 2012-08-06 12:58:00

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); 
+0

让我知道,如果它可以帮助你。 – 2012-08-06 12:33:45

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 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 constructor作品和直接使用它,而不是试图创建一个字符串,必须将它们是解析。

+0

感谢人 - 这就像一个伤害:) – Adrian 2012-08-06 12:53:00

+0

很酷,很高兴帮助。 – RobG 2012-08-06 23:19:27

+0

不能帮助它,但工作像一个伤害? :d:d:d – 2013-01-29 14:38:52