[英]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.