Moment.js isDST函数返回结果始终错误问题求助
解决Moment.js isDST()始终返回false的问题
我之前也踩过这个坑!问题根源出在时区设置上——Moment.js默认使用代码运行环境的本地时区,如果你的代码跑在UTC时区(很多在线代码平台比如repl.it的服务器默认就是UTC),而UTC本身没有夏令时机制,那isDST()自然会一直返回false。
解决方案
要正确检测夏令时,你需要为日期指定一个实行夏令时的时区,这就得用到moment-timezone扩展库(Moment核心库本身不支持自定义时区切换)。
步骤1:安装moment-timezone
npm install moment-timezone
步骤2:修正你的代码
下面是调整后的示例,我选用了美国东部时区(America/New_York,有明确的夏令时/冬令时切换):
import moment from 'moment-timezone'; // 2020年12月31日:美国东部处于冬令时(EST),返回false console.log(moment('2020-12-31').tz('America/New_York').isDST()); // 2027年5月23日:美国东部处于夏令时(EDT),返回true console.log(moment('2027-05-23').tz('America/New_York').isDST()); // 2011年3月12日(注意Moment月份是0索引,2代表3月):已进入夏令时,返回true console.log(moment([2011, 2, 12]).tz('America/New_York').isDST()); // 2018年9月14日(8代表9月):仍处于夏令时,返回true console.log(moment([2018, 8, 14]).tz('America/New_York').isDST()); // 当前时间:根据美国东部时区的夏令时状态返回结果 console.log(moment().tz('America/New_York').isDST());
额外说明
- 你可以替换成其他实行夏令时的时区,比如
Europe/London(英国时区)、America/Los_Angeles(美国西部时区)等,具体可参考IANA时区数据库的标准时区名。 - 如果你的代码在本地运行(比如电脑时区本身支持夏令时),不用
moment-timezone也能得到正确结果,但在线平台普遍使用UTC时区,所以必须手动指定时区。
内容的提问来源于stack exchange,提问作者Sergey
相关产品推荐
相关产品推荐

