将字符串转换为日期时的Javascript Date()函数和GMT偏移量

将字符串转换为日期时的Javascript Date()函数和GMT偏移量,javascript,Javascript,在javascript中将字符串转换为Date对象时,我注意到了一种特殊的行为。执行此操作时: var date1 = new Date("2014-09-28T00:00:00"); console.log(date1); 结果是: Sun Sep 28 2014 02:00:00 GMT+0200 (Srednja Europa - ljet. vrij.) 相同的代码与另一个日期相同 var date2 = new Date("2014-10-28T00:00:00"); conso

在javascript中将字符串转换为
Date
对象时,我注意到了一种特殊的行为。执行此操作时:

var date1 = new Date("2014-09-28T00:00:00");
console.log(date1);
结果是:

Sun Sep 28 2014 02:00:00 GMT+0200 (Srednja Europa - ljet. vrij.) 
相同的代码与另一个日期相同

var date2 = new Date("2014-10-28T00:00:00");
console.log(date2);
给出以下结果:

Tue Oct 28 2014 01:00:00 GMT+0100 (Srednja Europa - st. vrij.) 

请注意,第一个变量中的GMT偏移量为2小时,第二个变量中的GMT偏移量仅为1小时。第一种方法考虑了夏季时间计算,而第二种方法没有。有人能解释一下吗?必须提到的是,我来自克罗地亚,目前的格林尼治标准时间偏移量为+2小时,夏令时开启。

根据统计,克罗地亚的夏令时(DST)将于2014年10月26日结束。因此,第一个日期(9月28日)包括它(GMT+2),第二个日期(10月28日)不包括它(GMT+1)。

你完全正确。当我使用date1.getTime()==date2.getTime()来比较两个日期时,所有这些都让我感到困惑。但是,由于这是作为具有不同GMT偏移量的字符串返回的,因此字符串不匹配。date1==date2似乎也不起作用。那么,比较两个日期的正确方法是什么呢?我的问题是,我将date1创建为:var date1=新日期(“2014-09-28:00:00”);date1.setDate(date1.getDate()+30),然后将结果与另一个日期进行比较。虽然现在的日期已超过10月26日,但生成的日期仍然带有GMT+02,而不是GMT+01。