繁体   English   中英

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

[英]Returning to calendar in month view always goes back one month,

我很难让我的用户在更改后返回到他们工作的月份。

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

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中,当他们返回到日历时,它显示的是上个月。

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

您在月视图中遇到的问题是 fullCalendar 中任何月视图的“开始”日期通常是月初一两天。 例如,如果您打开当月(2021 年 8 月)的 fullCalendar 月视图,您将看到日历上显示的第一个日期是 7 月 27 日。 因此,如果您在将dateInfo.startStr添加到 localStorage 时记录它,您将看到 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM