2012-02-28 17 views
5

(en primer lugar, disculpe mi Inglés, soy un principiante)¿Cómo obtener el 4 lunes de un mes con js?

vamos a explicar la situación:

Me gustaría crear gráficos utilizando Google herramienta de Gráficos (darle una oportunidad, es muy útil) Esta parte no es realmente difícil ...

El problema viene cuando tengo un gráfico específico que requiere en el eje x las cuatro semanas de un mes: me gustaría mostrar en la pantalla solo los cuatro lunes en el mes actual.

Ya tengo las variables CurrentMonth y theYear actual y sé cómo obtener el primer día del mes. todo lo que necesito es cómo obtener los cuatro lunes de un mes, en una matriz. Y todo esto en el mismo archivo JavaScript.

Estoy bastante perdido dentro de mi lógica de programación, y he visto muchas soluciones que no encajan en mi caso.

es así, ¿qué es lo que tengo es:

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

y me gustaría tener algo como esto:

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

Gracias por la lectura, y si usted me podría ayudar ... :)

Gaelle

+1

Un mes puede tener 5 días. Como el mes actual tiene (febrero de 2012). – pduersteler

+1

bueno, febrero de 2012 tiene solo 4 lunes, el 6, el 13, el 20 y el 27 (ayer). comenzó un miércoles y terminó un miércoles ... Pero estoy de acuerdo, un mes podría tener 5 lunes como abril de 2012 ... y sí, tengo que recordar ese hecho al construir mi código – Gaelle

+0

confundido por mi propio calendario, me disculpo. – pduersteler

Respuesta

22

la siguiente function devolverá todos los lunes por la c meses urrent:

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

gracias jakeclarkson, ¡arregló el problema! – Gaelle

+0

Me alegro de que haya ayudado :-) – jabclab

3

Esto devolvería el cuarto último lunes del mes [m] en el año [y]

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 

Para ser más genérico, esto va a entregar el último cualquier día de la semana de un mes:

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

gracias, es muy interesante, y probablemente lo use más tarde – Gaelle

Cuestiones relacionadas