1

私は出発日=日付文字列(2012年4月16日)、時間文字列(05:00)、およびタイムゾーン(アジア/ドバイ) とarraivalDate =日付文字列(2012年4月16日)、時間文字列(02:00)を持っていました、およびTimeZone(America / New_York)

今、私は上記の日付を比較する必要があります。

if (departureDate > arraivalDate) {
    // do something
}

この比較の目的は、到着時刻が出発時刻より前であることを確認することです。これを行うための関数はjavascriptにありますか?機能全体を提供してください。

4

2 に答える 2

2

Dateオブジェクトのドキュメントを見てください。

getTime普遍的な時間に従って、指定された日付の時間に対応する数値を取得できる方法があります。つまり、getTimeメソッドによって返される値は、1970年1月1日00:00:00UTCからのミリ秒数です。

つまり、次のことができます。

if (departureDate.getTime() > arrivalDate.getTime()) {
    // Do something
}

次の方法で日付を宣言した場合:

var departureDate = new Date(Date.UTC(year, month, day, hour, minute, second))
    arrivalDate = new Date(Date.UTC(year, month, day, hour, minute, second))

タイムゾーンを尊重するようにします。ただし、UTC日付を指定する必要があります。Javascriptには、これよりも優れたタイムゾーンを処理するための組み込みの方法がありません。私の最初の文がそれを述べているように、Dateオブジェクトに関するドキュメントを見てください。

編集:チャットであ​​なたと話した後、これがあなたが望むと思うものです:

あなたが持っていることによると:

var orgti = document.getElementById('orginTimeZone').value; 
var desct = document.getElementById('descTimeZone').value;
var selfwDepDate = document.forms[0].fwDepartureDate.value; 
var selfwDepTime = document.forms[0].fwDepartureTime.value; 
var selfwArrDate = document.forms[0].fwArrivalDate.value; 
var selfwArrTime = document.forms[0].fwArrivalTime.value;

これを実行して、両方の日付を比較できます。

var departureDate = new Date( Date.UTC( selfwDepDate + selfwDepTime ) ) // This creates a date with what you got
var arrivalDate = new Date( Date.UTC( selfwArrDate + selfwArrTime ) ) // This too

// Now the tricky part: you substract the timezone, so that you get the same referential for both dates
departureDate = departureDate.getTime() - ( orgit * 3600000 ) // Multiplying by 3600000 to transform hours into milliseconds since "getTime" returns milliseconds
arrivalDate = arrivalDate.getTime() - ( desct * 3600000 ) // Same

// Now, you've got two timestamps based on dates with the same referential. You can use:
if ( departureDate > arrivalDate ) {
    // Do something
}
于 2012-04-16T09:02:17.787 に答える
1

すでに述べたように、比較する実際の秒数を抽出するには、getTimeを使用する必要があります。数値オフセットがある場合は、比較する前にそれらを日付に追加するだけです。

// Assuming departure is in +4 TZ (Asia/Duabai) and arrival is in -4 TZ (America/New_York)
var departureMsec = departureDate.getTime() + (+4 * 3600 * 1000)
var arrivalMsec = arrivalDate.getTime() + (-4 * 3600 * 1000)
if (departureMsec > arrivalMsec) {
    // Do something
}

入力の数値またはタイムゾーンがいくつかの一般的なサブセットに制限されていないため、オフセットがない場合は、事態はさらに複雑になります。JavaScriptの処理コードを含むtzdataバージョンがあるかどうかはわかりません。そのため、手動で実行する方法を示します。限られた数のゾーンで作業していて、どのゾーンにも夏時間がない場合は、単純にオフセットをハッシュに入れることができます。

var offsets={
    "Asia/Dubai": +4,
    "America/New_York": -4,
}

そしてそこからのデータを使用します。任意の量のゾーンが必要な場合、最善の策は、tzdataをそのようなハッシュに解析し、可能なすべての日付に対して正しい日光調整の手動処理を実装することです。これは、法律の変更に伴い、毎年ますます困難になります。古い日付の古い変換と新しい日付の新しい変換をサポートします。あなたのニーズについてもっと説明していただければ、さらに詳細を追加することができます。

于 2012-04-16T09:39:45.237 に答える