[英]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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.