我正在使用时刻时区。我收到日期时间字符串(ISO 8601)和时区(通过时刻时区识别为时区的字符串),需要检查日期在时区中是否有效。换句话说,如果时区CET
:
-
2015-03-03T12:00:00+01:00 --> true
(欧洲中部时间) -
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");
}
function isValidInTimeZone(dateString, timeZone) {
var m = moment.parseZone(dateString);
return m.utcOffset() === m.tz(timeZone).utcOffset();
}
timeZone
参数应为完整区域 ID,例如 "Europe/Paris"
。 某些缩写可能有效,但只有为向后兼容而明确建立的缩写才有效。