Solución:
Parece que moment.js no tiene el método que implemente la funcionalidad que estás buscando. Sin embargo, puede encontrar el n-ésimo número de un determinado día de la semana en un mes utilizando el Math.ceil
de El date / 7
Por ejemplo:
var firstFeb2014 = moment("2014-02-01"); //saturday
var day = firstFeb2014.day(); //6 = saturday
var nthOfMoth = Math.ceil(firstFeb2014.date() / 7); //1
var eightFeb2014 = moment("2014-02-08"); //saturday, the next one
console.log( Math.ceil(eightFeb2014.date() / 7) ); //prints 2, as expected
Parece que este es el número que está buscando, como lo demuestra la siguiente prueba
function test(mJsDate){
var str = mJsDate.toLocaleString().substring(0, 3) +
" number " + Math.ceil(mJsDate.date() / 7) +
" of the month";
return str;
}
for(var i = 1; i <= 31; i++) {
var dayStr = "2014-01-"+ i;
console.log(dayStr + " " + test(moment(dayStr)) );
}
//examples from the console:
//2014-01-8 Wed number 2 of the month
//2014-01-13 Mon number 2 of the month
//2014-01-20 Mon number 3 of the month
//2014-01-27 Mon number 4 of the month
//2014-01-29 Wed number 5 of the month
Al calcular la semana del mes en función de una fecha determinada, debe tener en cuenta la compensación. No todos los meses comienzan el primer día de la semana.
Si desea tener en cuenta este desplazamiento, puede usar algo como lo siguiente si está usando moment.
function weekOfMonth (input = moment()) {
const firstDayOfMonth = input.clone().startOf('month');
const firstDayOfWeek = firstDayOfMonth.clone().startOf('week');
const offset = firstDayOfMonth.diff(firstDayOfWeek, 'days');
return Math.ceil((input.date() + offset) / 7);
}
Simple usando moment.js
function week_of_month(date) { prefixes = [1,2,3,4,5]; return prefixes[0 | moment(date).date() / 7] }
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)