2012-04-16 64 views
1

我有一个departureDate =日期字符串(4月16日 - 2012年)的时间字符串(05:00),和时区(亚洲/迪拜) 和arraivalDate =日期字符串(4月16日 - 2012年)的时间字符串(02:00),和时区(美国/纽约)函数将转换为GMT日期在Java脚本

现在我需要比较上述日期 即,

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

目的这个比较是检查布置时间是在出发时间之前.. 是否有任何JavaScript的功能做到这一点? 请提供整个功能..

回答

2

看看Date object文档。

getTime方法,它允许您根据通用时间获取与指定日期的时间相对应的数值。这意味着getTime方法返回的值是1970年1月1日00:00:00 UTC以来的毫秒数。

这意味着你可以做到以下几点:

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 
} 
+0

但两个日期的时区是不同的....这就是问题..实际上有三个参数..一个是日期,时间和时区。 – 2012-04-16 09:05:56

+0

考虑到时区,因为'getTime'返回自1970年1月1日UTC以来的毫秒数。如果你在'Date'对象中指定时区,这应该不成问题。 – 2012-04-16 09:08:21

+0

你能否提供完整的函数来进行比较......正如我所说的,我有三个不同的参数在手,日期,时间和时区分开.. – 2012-04-16 09:10:25

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

这就是两个以上的价值说得好! :) – 2012-04-16 10:17:11