【问题标题】:Get the first and last visible date of the fullcalendar without using datepicker在不使用日期选择器的情况下获取完整日历的第一个和最后一个可见日期
【发布时间】:2021-03-26 17:45:48
【问题描述】:

我在我的代码中使用了 fullcalendar,并在其中实现并添加了事件,但我的目标是获取日历的第一个可见日期和最后一个可见日期。

我们想要做的是获取可见的第一个和最后一个日期,以便我们能够将提取的日期放入数据库并获取该日期范围内的所有事件。

我已经尝试过Get the start and end dates visible in a datepicker days view?,但我只想使用 jQuery 和 fullCalendar。有没有其他方法可以在不使用 datepicker 的情况下提取日期?

【问题讨论】:

  • 根据 SO [fullcalendar] 标签,版本差异很大,需要包含 fullcalendar 的版本
  • 嗨@freedomn-m,感谢您的回复。所以我们想要做的是获取可见的第一个和最后一个日期,以便我们能够将提取的日期放入数据库并获取该日期范围内的所有事件。
  • 是否可以获取完整日历的第一周的第一个日期和最后一周的最后一个日期?因为我不确定这是否可能,因为我已经进行了研究,但只能获得本周的第一个和最后一个日期。
  • 看起来总是从星期一到每月第一天或之前的 6 周。所以你可以得到日期:[first date] = [first of month] - [day of week of month] and [last date] = [first date] + (6*7)days
  • 谢谢@freedomn-m,我想我快到了。这是一个很大的帮助~

标签: jquery fullcalendar fullcalendar-2


【解决方案1】:

是否可以获取第一周的第一个日期和最后一个日期 完整日历的最后一周

...很容易 - 在最新版本(撰写本文时为 v5)中,您只需询问 current viewhas properties which contain those dates

不过,你也说过这是

这样我们就可以将提取的日期放入数据库中,然后 获取该日期范围内的所有事件。

如果这是您的目的,您没有理由手动执行此操作。 FullCalendar 已经提供了指定事件源的方法 - 您可以简单地 point it at a URL 以 fullCalendar 事件格式返回 JSON,或者如果您需要更大的灵活性,您可以 define a callback function 使用自定义代码来获取事件从他们的来源。

这两种方法的关键在于自动完成全日历

  • 每次日历上的日期范围更改时调用 URL / 运行该函数,并且

  • 为您提供新日期范围的开始和结束日期,以便您的服务器可以过滤它返回的事件,使其仅属于该范围内的事件。

您无需花时间手动尝试从日历中提取日期范围或通过其他方法为其提供事件。

【讨论】:

  • 也感谢@ADyson 的解释,这将在未来帮助我!!
  • @Jane 有什么特别的原因为什么它现在对你没有帮助吗?
  • 哦,好吧,那是一个非常旧的版本。你还有什么理由使用它? v5 具有更多功能、错误修复等。您可以使用版本标记您的问题,因为这些版本通常具有一些不同的功能。
  • Anyway yes events as JSON 和 (events as function)[fullcalendar.io/docs/v3/events-function] 我上面提到的两者都存在于 v2 中,虽然你使用的语法略有不同,但想法和基本行为是相同的。要采用更基本的方法来获取视图,您可以使用getView。 (请注意,链接说的是 v3,但正如文档所述,v3 和 v2 具有相同的面向外部的 API,因此文档是相同的。)
  • 其实我不是第一个启动这个程序的人,所以当我不得不再次修改到v5时要做很多工作。这就是为什么我改编了前人所做的事情。确实如此,语法略有不同,也就是说,也许我还没有找到正确的答案,但现在。在不久的将来,如果我必须为另一个程序创建另一个日历,我肯定会应用你在这个问题中回答的内容。无论如何,非常感谢你,我真的获得了知识。这是一个很大的帮助!赞! :)
【解决方案2】:

使用 5.5.1 版,您可以检查 渲染的 HTML。白天单元格有 fc-daygrid-daydata-date="{date}"

鉴于原始 div id 是“日历”,您可以使用:

var cells = $("#calendar td.fc-daygrid-day");
console.log(cells.length, cells.first().data("date"), cells.last().data("date"))

示例 sn-p:

$(function() { 
  var calendarEl = document.getElementById('calendar');
  var calendar = new FullCalendar.Calendar(calendarEl, {
    initialView: 'dayGridMonth'
  });
  calendar.render();
  
  var cells = $("#calendar td.fc-daygrid-day");
  console.log(cells.length, cells.first().data("date"), cells.last().data("date"))
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fullcalendar@5.5.1/main.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fullcalendar@5.5.1/main.css">

<div id='calendar'></div>

【讨论】:

  • 没错,但这是一种不必要的解决方法。 fullcalendar.io/docs/view-object
  • @ADyson 是的,对于不知道如何使用 API 的 OP 来说,这是一种解决方法
  • 当然可以,但也许可以告诉他们有关 API 的信息?看我的回答。
  • @freedomn-m,即使我没有使用 v5 fullcalendar,这对我也很有效。
  • 我很高兴它有帮助,但是您能否告诉我们您正在使用 的版本/选项 - 最好在问题中加上一个小的 sn-p。然后我们(可能是@ADyson ...)可以以正确的方式为您提供更新的详细信息。这应该只是一个临时的“黑客”。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多