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



我试图检查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,而实际上不应该(直到2天后)。你可以在这里查看不同国家的夏令时http://www.worldtimezone.com/daylight.html

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

时区与偏移量不同。UTC+01:00适用于许多不同的时区,有些使用夏令时,有些不使用。那些使用它的人也不会同时使用它。参见时区标签wiki中的"Time zone != Offset"。

Moment的"zone"函数实际上是用来指定偏移量的。它仍然会使用您自己的本地夏令时规则。

如果您想知道另一个时区的DST规则,您必须使用moment-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

相关内容

  • 没有找到相关文章

最新更新