.setHours返回错误的时间

时间:2015-10-26 12:37:10

标签: javascript fullcalendar momentjs

我正在FullCalendar 2.3.1使用moment js 2.9.0,实际上我是这样得到的日期:

var currDateStart = $calendar.fullCalendar('getView').start;

这回报我:

  

Mon Oct 26 2015 01:00:00 GMT + 0100(ora solare Europa occidentale)

注意:上面的日期是moment object

因此,在下一步中,我希望以ISO格式转换日期:

currDateStart =  new Date(new Date(currDateStart).setHours(0)).toISOString();

我得到了这个:

  

2015-10-25T23:00:00.000Z

但结果不正确,原因应该是:

  

2015-10-25T00:00:00.000Z

错误的日期错误我的日历渲染事件。我做错了什么?

2 个答案:

答案 0 :(得分:1)

结果是正确的,并且符合预期。 ISOString以UTC格式返回日期。注意2015-10-25T23:00:00.000Z末尾的Z.

您所在的时区为+1 UTC,因此当您设置setHours(0)时 - 它会设置您所在区域的时间,并且ISOString会以UTC(后面1小时)返回。您可以setHours(1)来对此进行计数,或者调整使用输出的函数以期望UTC(当地时间 - 1小时)的日期。

答案 1 :(得分:0)

这里发生了什么事情,当我尝试将日期设置为日期时,它会将日期转换为GMT + 0530,然后它会将日期转换为ISO字符串



var currDateStarttemp = 'Mon Oct 26 2015 1:00:00 GMT+0100 (ora solare Europa occidentale)';

var currDateStart = new Date(currDateStarttemp).toISOString();
snippet.log("currDateStart " + currDateStart);
currDateStart = new Date(currDateStart).setUTCHours(0)
snippet.log("setHours " + new Date(currDateStart));
currDateStart = new Date(currDateStart).toISOString();
snippet.log("toISOString " + currDateStart);

<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
&#13;
&#13;