我有一个departureDate =日期字符串(2012年4月16日),时间字符串(05:00)和 TimeZone(亚洲/迪拜) 和arraivalDate =日期字符串(2012年4月16日),时间字符串(02:00)和 TimeZone(America / New_York)
现在我需要比较上述日期 即。,
if (departureDate > arraivalDate) {
// do something
}
此比较的目的是检查出发时间是否在出发时间之前。 在javascript中有任何功能吗? 请提供整个功能..
答案 0 :(得分: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
}
答案 1 :(得分: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解析为这样的哈希并实现每个可能日期的正确日光调整的手动处理,每年变得越来越难,因为随着法律的变化,您将拥有支持旧日期的旧转换和新日期的新转换。如果您详细了解自己的需求,我可以添加更多细节。