在月视图中返回日历总是返回一个月,

Returning to calendar in month view always goes back one month,

我很难让我的用户return知道他们在进行更改后工作的月份。

目前,我有一个初始化日历的函数。

var iv = localStorage.getItem("fcDefaultView") || 'timeGridWeek';
var id = localStorage.getItem("fcDefaultDate") || new Date;
        initialView: iv,
        initialDate: id,
        datesSet: function (dateInfo) {
            localStorage.setItem("fcDefaultView", dateInfo.view.type);
            localStorage.setItem("fcDefaultDate", dateInfo.startStr);
        },

奇怪的是,当用户在 monthView 以外的任何视图中时,一切正常。但是当在 monthView 中,当他们 return 到日历时,它显示上个月。

因为月份是从0开始的,不是1。所以一月是“0”,二月是“1”。

月视图的问题是 fullCalendar 中任何月视图的“开始”日期通常是 月份开始前的一两天.例如,如果您打开当前月份(2021 年 8 月)的 fullCalendar 月视图,您会看到日历上显示的第一个日期是 7 月 27 日。因此,如果您在将其添加到 localStorage 时记录 dateInfo.startStr,您将看到 2021 年 8 月(再次举例)将保存 2021 年 7 月 27 日。

但是,如果您在下次加载日历时将其设置为初始日期,则 fullCalendar 会将视图设置为该日期所在的月份。

要解决这个问题,您可以从视图对象中获取“currentStart”值,而不是直接使用 datesSet 回调中提供的日期,这是视图试图表示的时间间隔的开始,而不是可见时间段的开始。这种区别只适用于月视图,因此它对其他视图的已经工作的行为没有影响。

将 setItem 调用更改为:

localStorage.setItem("fcDefaultDate", dateInfo.view.currentStart);

由于这是一个 JS Date 对象,然后被序列化,而不是一个 ISO 字符串,您需要在再次读取它时显式解析它,因此需要另一个小改动:

var id = Date.parse(localStorage.getItem("fcDefaultDate")) || new Date();

演示:https://codepen.io/ADyson82/pen/JjNrMBd

文档:https://fullcalendar.io/docs/view-object