Получить недели в месяц через Javascript - PullRequest
14 голосов
/ 20 марта 2010

Как в Javascript узнать количество недель в месяце? Кажется, я нигде не могу найти код для этого.

Мне нужно это, чтобы я мог знать, сколько строк мне нужно для данного месяца.

Если быть более точным, я хотел бы указать количество недель, в которых есть хотя бы один день в неделе (неделя, определяемая как начинающаяся в воскресенье и заканчивающаяся в субботу).

Итак, для чего-то подобного я хотел бы знать, что у него есть 5 недель:

S  M  T  W  R  F  S

         1  2  3  4

5  6  7  8  9  10 11

12 13 14 15 16 17 18

19 20 21 22 23 24 25

26 27 28 29 30 31 

Спасибо за помощь.

Ответы [ 15 ]

0 голосов
/ 24 января 2018

Это работает для меня,

function(d){
    var firstDay = new Date(this.getFullYear(), this.getMonth(), 1).getDay();
    return Math.ceil((d.getDate() + (firstDay - 1))/7);
}

«d» должно быть датой.

0 голосов
/ 02 января 2018
    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 голосов
/ 24 мая 2015
function getWeeksInMonth(month_number, year) {
  console.log("year - "+year+" month - "+month_number+1);

  var day = 0;
  var firstOfMonth = new Date(year, month_number, 1);
  var lastOfMonth = new Date(year, parseInt(month_number)+1, 0);

  if (firstOfMonth.getDay() == 0) {
    day = 2;
    firstOfMonth = firstOfMonth.setDate(day);
    firstOfMonth = new Date(firstOfMonth);
  } else if (firstOfMonth.getDay() != 1) {
    day = 9-(firstOfMonth.getDay());
    firstOfMonth = firstOfMonth.setDate(day);
    firstOfMonth = new Date(firstOfMonth);
  }

  var days = (lastOfMonth.getDate() - firstOfMonth.getDate())+1
  return Math.ceil( days / 7);              
}

Это сработало для меня. Пожалуйста, попробуйте

Спасибо всем

0 голосов
/ 12 ноября 2013

Этот фрагмент кода дает вам точное количество недель в данном месяце:

Date.prototype.getMonthWeek = function(monthAdjustement)
{       
    var firstDay = new Date(this.getFullYear(), this.getMonth(), 1).getDay();
    var returnMessage = (Math.ceil(this.getDate()/7) + Math.floor(((7-firstDay)/7)));
    return returnMessage;
}

Переменная monthAdjustement добавляет или вычитает месяц, в котором вы сейчас находитесь

Я использую его в проекте календаря в JS и его эквиваленте в Objective-C, и он хорошо работает

0 голосов
/ 29 июня 2012

Спасибо Эд Пур за его решение, это то же самое, что и прототип Date.

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);
}

Так что вы можете использовать его как

var weeksInCurrentMonth = new Date().countWeeksOfMonth();
var weeksInDecember2012 = new Date(2012,12,1).countWeeksOfMonth(); // 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...