我试图检查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