我正在使用时刻时区。我收到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");
}
答案 0 :(得分:1)
function isValidInTimeZone(dateString, timeZone) {
var m = moment.parseZone(dateString);
return m.utcOffset() === m.tz(timeZone).utcOffset();
}
timeZone
参数应为完整的区域ID,例如"Europe/Paris"
。有些缩写可能有效,但只有为了向后兼容而明确建立的缩写。