为什么使用 zone() 时 momentjs isDST() 返回错误的时间

2023-12-25

我正在尝试检查 isDST() (如果夏令时处于活动状态,则返回 true 或 false)。如果我使用当前日期时间,它工作正常 - 例如 var isdst = moment().isDST() 对于我的时区返回 true 。但是,我想要做的是首先设置时区偏移量,然后检查该时区是否启用夏令时。我下面有以下代码。

var isdst = moment('2014-03-28').zone('+01:00');
console.log('daylight savings for +0100 is ' + isdst); //returns true when it should return false

如果您查看时区 +0100(欧盟国家)的 DST 时间,它要到 2014 年 3 月 30 日才会生效。但是,上面的代码在 3 月 28 日返回 true,而实际上不应该返回 true(直到 2 天后)。您可以在此处查看不同国家的夏令时http://www.worldtimezone.com/daylight.html http://www.worldtimezone.com/daylight.html

我做了一些更多的测试,似乎代码在运行时考虑了我自己的时区(美国东部标准)。如果您看到上面的网站,东部标准夏令时从 2014 年 3 月 9 日开始。如果我在 3 月 9 日之前测试代码,它会返回 false(即 3 月 8 日)。如果我在 3 月 11 日测试它,它会返回 true。这告诉我它没有考虑区域(“+0100”)并且以某种方式使用我的时区......为什么?如何设置 momentjs 日期的时区?我查看了文档(http://momentjs.com/docs/ http://momentjs.com/docs/)并且它说这是正确的方法,但它对我不起作用。


时区与偏移量不同。 UTC+01:00 适用于许多不同的时区,有些使用夏令时,有些则不使用。使用它的人也不会同时应用它。请参阅“时区!=偏移量”时区标签 wiki https://stackoverflow.com/tags/timezone/info.

Moment 的“zone”函数实际上是用于指定偏移量。它仍将使用您自己的本地 DST 规则。

如果您想了解其他时区的 DST 规则,则必须使用时刻时区 http://momentjs.com/timezone/添加在。例如:

var tz = 'Europe/Paris';           // or whatever your time zone is
var dt = '2014-05-14 12:34:56';    // or whatever date/time you're working with
moment.tz(dt,tz).isDST()           // returns true in this case
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么使用 zone() 时 momentjs isDST() 返回错误的时间 的相关文章

随机推荐