.setHours return 错误的时间

.setHours return wrong hours

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

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

这个return我:

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

错误的日期错误我的日历呈现事件。我做错了什么?

这是当我尝试设置日期时发生的事情,它会将日期转换为 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>

结果正确,符合预期。 ISOString 返回 UTC 日期。注意 2015-10-25T23:00:00.000Z.

末尾的 Z

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