日历控制如何传递日期、开始日期和结束日期

Posted

技术标签:

【中文标题】日历控制如何传递日期、开始日期和结束日期【英文标题】:Calendar control how to pass date, Start Date and End Date 【发布时间】:2020-01-23 09:54:34 【问题描述】:

我正在寻找一个活动日历,并遇到了一个示例 https://codepen.io/peanav/pen/ulkof,它看起来不错,但是当我浏览 javascript 时,我无法找到日期开始日期和结束日期经过的位置,我可以看到一些形式的数据只有TitleTypecolour 的数组,但我没有在数组中看到日期

!function() 
  var data = [
     eventName: 'Lunch Meeting w/ Mark', calendar: 'Work', color: 'orange' ,
     eventName: 'Interview - Jr. Web Developer', calendar: 'Work', color: 'orange' ,
     eventName: 'Demo New App to the Board', calendar: 'Work', color: 'orange' ,
     eventName: 'Dinner w/ Marketing', calendar: 'Work', color: 'orange' ,

     eventName: 'Game vs Portalnd', calendar: 'Sports', color: 'blue' ,
     eventName: 'Game vs Houston', calendar: 'Sports', color: 'blue' ,
     eventName: 'Game vs Denver', calendar: 'Sports', color: 'blue' ,
     eventName: 'Game vs San Degio', calendar: 'Sports', color: 'blue' ,

     eventName: 'School Play', calendar: 'Kids', color: 'yellow' ,
     eventName: 'Parent/Teacher Conference', calendar: 'Kids', color: 'yellow' ,
     eventName: 'Pick up from Soccer Practice', calendar: 'Kids', color: 'yellow' ,
     eventName: 'Ice Cream Night', calendar: 'Kids', color: 'yellow' ,

     eventName: 'Free Tamale Night', calendar: 'Other', color: 'green' ,
     eventName: 'Bowling Team', calendar: 'Other', color: 'green' ,
     eventName: 'Teach Kids to Code', calendar: 'Other', color: 'green' ,
     eventName: 'Startup Weekend', calendar: 'Other', color: 'green' 
  ];

我不是 JS 人,谁能告诉我如何将日期传递给这个日历

【问题讨论】:

【参考方案1】:

稍加修改即可实现。

    接受 minDate 和 maxDate 作为构造函数的一部分并创建属性
var calendar = new Calendar('#calendar', data, '1/10/2019', '12/31/2019');

Constructor
function Calendar(selector, events, minDate, maxDate) 
  ..
  ..
  this.minDate = moment(minDate);
  this.maxDate = moment(maxDate);
  ..
  ..

    修改openDay方法以检查minDatemaxDate
Calendar.prototype.openDay = function(el) 
    var details, arrow;
    var dayNumber = +el.querySelectorAll('.day-number')[0].innerText || +el.querySelectorAll('.day-number')[0].textContent;
    var day = this.current.clone().date(dayNumber);

    if (day.isBefore(this.minDate) || day.isAfter(this.maxDate)) 
      return;
    
    ..
    ..

    修改nextMonthprevMonth方法来检查maxDateminDate
Calendar.prototype.nextMonth = function() 
    if (this.current.isAfter(this.maxDate)) 
      return;
    
    ...


Calendar.prototype.prevMonth = function() 
    if (this.current.isBefore(this.minDate)) 
      return;
    
    ...


在这里工作 Codepen - https://codepen.io/aditya-bhave/pen/eYObqYq

注意 - 我没有添加样式以使超出最小值-最大值范围的日期变灰,但可以通过添加样式轻松完成。

【讨论】:

我如何将每个事件映射到它的日期,因为我正在寻找类似 eventName: 'Lunch Meeting w/ Mark', calendar: 'Work', color: 'orange', sDate:'01/01/2019', eDate:'15/01/2019' , .................. .,..........等等.. 您可以将sDateeDate 作为属性添加到event 数组并更新renderEvents 函数以显示它。 sDateeDate 是否还有其他功能? 不,我正在查看基本功能,以便事件按日期显示,事件应按 sDate 和 eDate 显示.. 好的。然后你应该在renderEvents方法中循环events数组并推送所有在点击日期内的事件。【参考方案2】:

这里的日期是随机设置的

Calendar.prototype.drawMonth = function()   //line no 54
    var self = this;

    this.events.forEach(function(ev) 
      ev.date = self.current.clone().date(Math.random() * (29 - 1) + 1);
    );
    ....

你可以像下面这样设置日期

ev.date = moment(new Date("10/5/2019"));

您可以向数据对象添加新属性(日期),例如

var data = [
     
       eventName: 'Lunch Meeting w/ Mark', 
       calendar: 'Work', 
       color: 'orange',
       date: '10/5/2019'
 ,

编辑:

替换这一行

ev.date = self.current.clone().date(Math.random() * (29 - 1) + 1); //line No. 58

ev.date = moment(new Date(ev.date));

【讨论】:

我如何将每个事件映射到它的日期,因为我正在寻找类似 eventName: 'Lunch Meeting w/ Mark', calendar: 'Work', color: 'orange', sDate :'01/01/2019', eDate:'15/01/2019' , ........., ..........,....... ..等等.. 但是我是单日做的……真的需要开始和结束日期吗?

以上是关于日历控制如何传递日期、开始日期和结束日期的主要内容,如果未能解决你的问题,请参考以下文章

我有日历日期,如何在每个日期结束?

用于选择开始和结束日期的数据范围选择器

js如何控制 开始日期 到 结束日期 跨月的判断?

禁用结束日期不超过 10 天的日历 javascript

My97DatePicker日历实现开始日期小于结束日期验证

如何获得当前日期前 30 天?