【问题标题】:.setHours return wrong hours.setHours 返回错误的时间
【发布时间】:2015-10-26 12:37:09
【问题描述】:

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

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

这还给我:

2015 年 10 月 26 日星期一 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

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

【问题讨论】:

  • 为什么你认为应该是午夜?您在时区 +1 的 26 日凌晨 1 点。然后,您将小时数设置为 0,在时区 +1 中为您提供 26 日午夜。然后,您需要没有时区信息的 ISO 时间,在晚上 11 点给您 25 日。您的预期结果也应该是 26 日 - 这是一个错字吗?
  • 活动的开始日期是我周日晚和周一回来,因为我固定周一午夜回来?
  • 没看懂,要先转换日期再设置ISO格式?你能给我举个例子吗?

标签: javascript fullcalendar momentjs


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 问题是我想得到的最后日期应该是:2015-10-26T00:00:00.000ZZ 我怎么能做到这一点?
    • 我已经更新了我的代码。我认为这将解决您的问题
    猜你喜欢
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    相关资源
    最近更新 更多