簡體   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