Get Weeks In Month Through Javascript

后端 未结 17 1262
盖世英雄少女心
盖世英雄少女心 2020-11-30 09:03

In Javascript, how do I get the number of weeks in a month? I can\'t seem to find code for this anywhere.

I need this to be able to know how many rows I need for a g

相关标签:
17条回答
  • 2020-11-30 09:38

    using moment js

    function getWeeksInMonth(year, month){
    
            var monthStart     = moment().year(year).month(month).date(1);
            var monthEnd       = moment().year(year).month(month).endOf('month');
            var numDaysInMonth = moment().year(year).month(month).endOf('month').date();
    
            //calculate weeks in given month
            var weeks      = Math.ceil((numDaysInMonth + monthStart.day()) / 7);
            var weekRange  = [];
            var weekStart = moment().year(year).month(month).date(1);
            var i=0;
    
            while(i<weeks){
                var weekEnd   = moment(weekStart);
    
    
                if(weekEnd.endOf('week').date() <= numDaysInMonth && weekEnd.month() == month) {
                    weekEnd = weekEnd.endOf('week').format('LL');
                }else{
                    weekEnd = moment(monthEnd);
                    weekEnd = weekEnd.format('LL')
                }
    
                weekRange.push({
                    'weekStart': weekStart.format('LL'),
                    'weekEnd': weekEnd
                });
    
    
                weekStart = weekStart.weekday(7);
                i++;
            }
    
            return weekRange;
        } console.log(getWeeksInMonth(2016, 7))
    
    0 讨论(0)
  • 2020-11-30 09:39

    Weeks start on Sunday

    This ought to work even when February doesn't start on Sunday.

    function weekCount(year, month_number) {
    
        // month_number is in the range 1..12
    
        var firstOfMonth = new Date(year, month_number-1, 1);
        var lastOfMonth = new Date(year, month_number, 0);
    
        var used = firstOfMonth.getDay() + lastOfMonth.getDate();
    
        return Math.ceil( used / 7);
    }
    

    Weeks start on Monday

    function weekCount(year, month_number) {
    
        // month_number is in the range 1..12
    
        var firstOfMonth = new Date(year, month_number-1, 1);
        var lastOfMonth = new Date(year, month_number, 0);
    
        var used = firstOfMonth.getDay() + 6 + lastOfMonth.getDate();
    
        return Math.ceil( used / 7);
    }
    

    Weeks start another day

    function weekCount(year, month_number, startDayOfWeek) {
      // month_number is in the range 1..12
    
      // Get the first day of week week day (0: Sunday, 1: Monday, ...)
      var firstDayOfWeek = startDayOfWeek || 0;
    
      var firstOfMonth = new Date(year, month_number-1, 1);
      var lastOfMonth = new Date(year, month_number, 0);
      var numberOfDaysInMonth = lastOfMonth.getDate();
      var firstWeekDay = (firstOfMonth.getDay() - firstDayOfWeek + 7) % 7;
    
      var used = firstWeekDay + numberOfDaysInMonth;
    
      return Math.ceil( used / 7);
    }
    
    0 讨论(0)
  • 2020-11-30 09:39

    None of the solutions proposed here don't works correctly, so I wrote my own variant and it works for any cases.

    Simple and working solution:

    /**
     * Returns count of weeks for year and month
     *
     * @param {Number} year - full year (2016)
     * @param {Number} month_number - month_number is in the range 1..12
     * @returns {number}
     */
    var weeksCount = function(year, month_number) {
        var firstOfMonth = new Date(year, month_number - 1, 1);
        var day = firstOfMonth.getDay() || 6;
        day = day === 1 ? 0 : day;
        if (day) { day-- }
        var diff = 7 - day;
        var lastOfMonth = new Date(year, month_number, 0);
        var lastDate = lastOfMonth.getDate();
        if (lastOfMonth.getDay() === 1) {
            diff--;
        }
        var result = Math.ceil((lastDate - diff) / 7);
        return result + 1;
    };
    

    you can try it here

    0 讨论(0)
  • 2020-11-30 09:40

    Thanks to Ed Poor for his solution, this is the same as Date prototype.

    Date.prototype.countWeeksOfMonth = function() {
      var year         = this.getFullYear();
      var month_number = this.getMonth();
      var firstOfMonth = new Date(year, month_number-1, 1);
      var lastOfMonth  = new Date(year, month_number, 0);
      var used         = firstOfMonth.getDay() + lastOfMonth.getDate();
      return Math.ceil( used / 7);
    }
    

    So you can use it like

    var weeksInCurrentMonth = new Date().countWeeksOfMonth();
    var weeksInDecember2012 = new Date(2012,12,1).countWeeksOfMonth(); // 6
    
    0 讨论(0)
  • 2020-11-30 09:43
        function weekCount(year, month_number, day_start) {
    
            // month_number is in the range 1..12
            // day_start is in the range 0..6 (where Sun=0, Mon=1, ... Sat=6)
    
            var firstOfMonth = new Date(year, month_number-1, 1);
            var lastOfMonth = new Date(year, month_number, 0);
    
            var dayOffset = (firstOfMonth.getDay() - day_start + 7) % 7;
            var used = dayOffset + lastOfMonth.getDate();
    
            return Math.ceil( used / 7);
        }
    
    0 讨论(0)
提交回复
热议问题