检查片刻在特定时区是否有效

时间:2015-04-21 13:09:07

标签: javascript timezone momentjs

我正在使用时刻时区。我收到datetimestrings(iso 8601)和timezones(字符串按时区识别为时区),需要检查日期是否在时区有效。换句话说,如果时区是CET

  • 2015-03-03T12:00:00+01:00 --> true(是CET)
  • 2015-03-03T12:00:00+02:00 --> false(+ 02:00在DST期间仅为CET,而3-3不是DST)
  • 2015-07-03T12:00:00+01:00 --> false
  • 2015-07-03T12:00:00+02:00 --> true

注意,以下两者都有效(并应该以这种方式识别),因为那天DST结束。

  • 2015-10-25T02:30:00+01:00 --> true
  • 2015-10-25T02:30:00+02:00 --> true

我目前的做法是将时刻对象转换为所需时区,并检查时区偏移量是否相同,但我觉得应该有更简单的方法......

function isValidInTimezone(date, timezone) {
  return date.format("Z") === date.clone().tz(timezone).format("Z");
}

1 个答案:

答案 0 :(得分:1)

function isValidInTimeZone(dateString, timeZone) {
  var m = moment.parseZone(dateString);
  return m.utcOffset() === m.tz(timeZone).utcOffset();
}

timeZone参数应为完整的区域ID,例如"Europe/Paris"。有些缩写可能有效,但只有为了向后兼容而明确建立的缩写。