2012-08-06 85 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