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

时间:2014-06-02 14:58:42

标签: javascript timezone dst momentjs timezone-offset

我正在尝试检查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

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

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

1 个答案:

答案 0 :(得分:6)

时区与偏移量不同。 UTC + 01:00适用于许多不同的时区,有些使用夏令时,有些则不适用。那些使用它的人也不会同时应用它。请参阅"时区!=偏移"在the timezone tag wiki

时刻"区"函数实际上是用于指定偏移量。它仍将使用您自己的本地DST规则。

如果您想了解其他时区的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