Как получить 4 понедельника месяца с помощью js? - PullRequest
7 голосов
/ 28 февраля 2012

(прежде всего, извините за мой английский, я новичок)

позвольте мне объяснить ситуацию:

Я хотел бы создать диаграммы с помощью Google Charts Tool (дайте емупопробуй, это очень полезно)Эта часть на самом деле не сложная ...

Проблема возникает, когда у меня есть конкретный график, требующий по оси х четыре недели месяца: я хотел бы отобразить на экране только четыре понедельника вcurrentmonth.

У меня уже есть переменные currentMonth и currentYear, и я знаю, как получить первый день месяца.все, что мне нужно, это как получить четыре понедельника месяца в массиве.И все это в одном и том же файле JavaScript.

Я довольно потерян в своей логике программирования, и я видел множество решений, которые не соответствуют моему случаю.

Итак, что же делатьу меня есть:

var date = new Date();
var currentYear = date.getFullYear();
var currentMonth = date.getMonth();
var firstDayofMonth = new Date(currentYear,currentMonth,1);
var firstWeekDay = firstDayofMonth.getDay();

и я хотел бы иметь что-то вроде этого:

var myDates =
[new Date(firstMonday),new Date(secondMonday), new Date(thirdMonday),new Date(fourthMonday)]

Спасибо за чтение, и если вы могли бы помочь мне ...:)

Гаэль

Ответы [ 2 ]

27 голосов
/ 28 февраля 2012

Следующие function вернут все понедельники за текущий месяц:

function getMondays() {
    var d = new Date(),
        month = d.getMonth(),
        mondays = [];

    d.setDate(1);

    // Get the first Monday in the month
    while (d.getDay() !== 1) {
        d.setDate(d.getDate() + 1);
    }

    // Get all the other Mondays in the month
    while (d.getMonth() === month) {
        mondays.push(new Date(d.getTime()));
        d.setDate(d.getDate() + 7);
    }

    return mondays;
}
4 голосов
/ 28 февраля 2012

Это вернет четвертый последний понедельник месяца [м] в году [у]

function lastmonday(y,m) {
 var dat = new Date(y+'/'+m+'/1')
    ,currentmonth = m
    ,firstmonday = false;
  while (currentmonth === m){
    firstmonday = dat.getDay() === 1 || firstmonday;
    dat.setDate(dat.getDate()+(firstmonday ? 7 : 1));
    currentmonth = dat.getMonth()+1;
  }
  dat.setDate(dat.getDate()-7);
  return dat;
}
// usage 
lastmonday(2012,3); //=>Mon Mar 26 2012 00:00:00 GMT+0200
lastmonday(2012,2)  //=>Mon Feb 27 2012 00:00:00 GMT+0100
lastmonday(1997,1)  //=>Mon Jan 27 1997 00:00:00 GMT+0100
lastmonday(2012,4)  //=>Mon Apr 30 2012 00:00:00 GMT+0200

Чтобы быть более обобщенным, это даст последний любой день недели:

function lastDayOfMonth(y,m,dy) {
 var  days = {sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6}
     ,dat = new Date(y+'/'+m+'/1')
     ,currentmonth = m
     ,firstday = false;
  while (currentmonth === m){
    firstday = dat.getDay() === days[dy] || firstday;
    dat.setDate(dat.getDate()+(firstday ? 7 : 1));
    currentmonth = dat.getMonth()+1 ;
  }
  dat.setDate(dat.getDate()-7);
  return dat;
 }
// usage 
lastDayOfMonth(2012,2,'tue'); //=>Tue Feb 28 2012 00:00:00 GMT+0100
lastDayOfMonth(1943,5,'fri'); //=>Fri May 28 1943 00:00:00 GMT+0200
...