0

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 でのみ、 と で「NaN」値を取得しましtimestamp1timestamp2

アドバイスありがとう。

4

3 に答える 3

1

Date-Constructorの引数を間違った形式で渡しているようです。MSDNによると、 の IE 実装はDate次の順序で日付を受け入れます。

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

引数をこの形式で渡すことを確認すると、すべてが正常に機能するはずです。ここで動作するコードを見つけることができます: http://jsfiddle.net/utXMD/

于 2012-08-06T12:37:24.487 に答える
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コンストラクターがどのように機能するかを確認し、直接使用することをお勧めします。

于 2012-08-06T12:35:42.213 に答える
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);
于 2012-08-06T12:28:39.073 に答える