2012-04-16 11 views
1

私はdepartureDate =日付文字列(2012年4月16日)、時間文字列(05:00)、およびTimeZone(アジア/ドバイ) およびarraivalDate =日付文字列の(16年04月2012年)、時間文字列(2時)、およびタイムゾーン(アメリカ/ニューヨーク)javaスクリプトでgmt日付に変換する関数

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

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

目的この比較は到着時間を確認することです。 は、これを行うにはJavaScriptの任意の関数ですか? 全体の機能を指定してください。

答えて

2

Date objectのドキュメントをご覧ください。

指定された日付の時刻に対応する数値を世界時に応じて取得できるようにする方法はgetTimeです。つまり、getTimeメソッドによって返される値は、1970年1月1日00:00:00 UTCからのミリ秒数です。あなたは次の操作を行うことができることを意味し

:だから、それはタイムゾーンを尊重することを

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

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

あなたがあなたの日付、次のように宣言提供。あなたは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 
} 
+0

2つの日付のタイムゾーンは異なるです....実際には3つの引数をとります.1つは日付、時刻、タイムゾーンです。 –

+0

'getTime'は1970年1月1日からのミリ秒数を返すので、タイムゾーンが考慮されます。 'Date'オブジェクトにタイムゾーンを指定すると、それは問題ではありません。 –

+0

私は比較、..を行うための完全な機能を私に提供することができます私は手、日付、時間と時間帯別々に3つの異なる引数を持っていたと言いました.. –

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をそのようなハッシュに解析し、可能な日付ごとに正しい夏時間調整の手動処理を実装することをお勧めします。これは、法律の変更により、古い日付の古いコンバージョンと新しい日付の新しいコンバージョンをサポートします。あなたのニーズについてもっと詳しく説明すれば、さらに詳しい情報を追加できます。

+0

thatsのdepartureDate = new Date(Date.UTC(selfwDepDate + '120')) \t var arrivalDate = new Dateよく置きます! :) –

関連する問題