【问题标题】:Jump to/show specific week in calendar by using week number使用周数跳转到/显示日历中的特定周
【发布时间】:2014-09-26 15:34:14
【问题描述】:

是否有可能通过使用周数跳转到/显示特定周?例如,如果我想显示第 43 周,有什么办法可以做到吗?

我知道如何使用goToDate 选项然后将视图更改为周,但是有没有可能使用周数来做到这一点?

【问题讨论】:

    标签: javascript date fullcalendar


    【解决方案1】:

    我在How to convert a week number to a date in Javascript 找到了相关功能。有了它,只需传递年份和周数,它就会返回一个格式正确的日期对象:

    var gotoweek = firstDayOfWeek( date.year(), date.weeks() );
    $('#mycalendar').fullCalendar( 'gotoDate', gotoweek );
    

    在下面的例子中,点击任何一天都会把我们带到相对周数的周视图:

    // Create a date object based on year and week number
    // https://stackoverflow.com/a/19375264/1287812
    function firstDayOfWeek( year, week ) {
      // Jan 1 of 'year'
      var d = new Date(year, 0, 1),
        offset = d.getTimezoneOffset();
    
      // ISO: week 1 is the one with the year's first Thursday 
      // so nearest Thursday: current date + 4 - current day number
      // Sunday is converted from 0 to 7
      d.setDate(d.getDate() + 4 - (d.getDay() || 7));
    
      // 7 days * (week - overlapping first week)
      d.setTime(d.getTime() + 7 * 24 * 60 * 60 * 1000 * (week + (year == d.getFullYear() ? -1 : 0)));
    
      // daylight savings fix
      d.setTime(d.getTime() + (d.getTimezoneOffset() - offset) * 60 * 1000);
    
      // back to Monday (from Thursday)
      d.setDate(d.getDate() - 3);
    
      return d;
    }
    
    $('#mycalendar').fullCalendar({
      header: {
        left: 'prev,next today',
        center: 'title',
        right: 'month agendaWeek agendaDay'
      },
      weekNumbers: true,
      dayClick: function(date, jsEvent, view) {
        var gotoweek = firstDayOfWeek( date.year(), date.weeks() );
        $('#mycalendar').fullCalendar( 'gotoDate', gotoweek );
        $('#mycalendar').fullCalendar( 'changeView', 'agendaWeek' );
      },
      events: [{
        title: 'Click me 1',
        msg: 'I am clipped to the left which is annoying',
        start: '2014-09-01 06:00:00',
        end: '2014-09-01 08:00:00',
        editable: false,
        allDay: false
      }, {
        title: 'Click me 2',
        msg: 'I am OK',
        start: '2014-09-04 14:00:00',
        end: '2014-09-04 15:00:00',
        editable: false,
        allDay: false
      }]
    });
    #mycalendar {
      margin: 30px;
      height: 500px;
      max-width: 500px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.3/moment.min.js"></script>
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.1.1/fullcalendar.min.js"></script>
    <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.1.1/fullcalendar.min.css">
    <div id="mycalendar"></div>

    【讨论】:

      猜你喜欢
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多