检查某个时刻在特定时区是否有效
Check whether a moment is valid in a specific timezone
我正在使用时刻时区。我收到日期时间字符串(iso 8601)和时区(被 moment-timezone 识别为时区的字符串)并且需要检查日期在时区中是否有效。换句话说,如果时区是 CET
:
2015-03-03T12:00:00+01:00 --> true
(CET)
2015-03-03T12:00:00+02:00 --> false
(夏令时+02:00只有CET,3-3不是DST)
2015-07-03T12:00:00+01:00 --> false
2015-07-03T12:00:00+02:00 --> true
请注意,自夏令时结束那天起,以下内容都是有效的(并且应该这样识别)。
2015-10-25T02:30:00+01:00 --> true
2015-10-25T02:30:00+02:00 --> true
我目前的做法是将moment-object转换为需要的timezone,然后检查timezone offset是否相同,但我觉得应该有更简单的方法...
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"
。一些缩写可能有效,但只有那些为向后兼容而明确建立的缩写才有效。
我正在使用时刻时区。我收到日期时间字符串(iso 8601)和时区(被 moment-timezone 识别为时区的字符串)并且需要检查日期在时区中是否有效。换句话说,如果时区是 CET
:
2015-03-03T12:00:00+01:00 --> true
(CET)2015-03-03T12:00:00+02:00 --> false
(夏令时+02:00只有CET,3-3不是DST)2015-07-03T12:00:00+01:00 --> false
2015-07-03T12:00:00+02:00 --> true
请注意,自夏令时结束那天起,以下内容都是有效的(并且应该这样识别)。
2015-10-25T02:30:00+01:00 --> true
2015-10-25T02:30:00+02:00 --> true
我目前的做法是将moment-object转换为需要的timezone,然后检查timezone offset是否相同,但我觉得应该有更简单的方法...
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"
。一些缩写可能有效,但只有那些为向后兼容而明确建立的缩写才有效。