2012-02-28 4 views
5

(в первую очередь, простите мой английский, я новичок)Как получить 4 месяца месяца с js?

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

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

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

У меня уже есть текущие переменные 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)] 

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

Gaelle

+1

Месяц может иметь 5 понедельников. Как и в текущем месяце (февраль, 2012). – pduersteler

+1

хорошо, февраль 2012 года имеет только 4 понедельника, 6, 13, 20 и 27 (вчера). это началось в среду и закончилось в среду. Но я согласен, месяц может иметь 5 месяцев, как апрель 2012 года .. и да, я должен помнить этот факт при создании моего кода – Gaelle

+0

, смущенного моим собственным календарем, извиняюсь. – pduersteler

ответ

22

следующая 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; 
} 
+0

спасибо jakeclarkson, он исправил проблему !!! – Gaelle

+0

Рад, что это помогло :-) – jabclab

3

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

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 
+0

спасибо, это очень интересно, и я, вероятно, буду использовать это позже – Gaelle

Смежные вопросы