Estoy creando un calendario en el que imprimo semanas en formato tabular. Un requisito es que pueda comenzar las semanas el lunes o el domingo, según alguna opción del usuario. Estoy teniendo dificultades para usar el método isoWeekday de moment .
// Start of some date range. Can be any day of the week.
var startOfPeriod = moment("2013-06-23T00:00:00"),
// We begin on the start of the first week.
// Mon Tues Wed Thur Fri Sat Sun
// 20 21 22 23 24 25 26
begin = moment(startOfPeriod).isoWeekday(1); // will pull from user setting
console.log(begin.isoWeekday()); // 1 - all good
// Let's get the beginning of this first week, respecting the isoWeekday
begin.startOf('week');
console.log(begin.isoWeekday()); // 7 - what happened ???
// Get column headers
for (var i=0; i<7; i++) {
console.log(begin.format('ddd')); // I want Monday first!
begin.add('d', 1);
}
EDITAR Entendí mal lo que isoWeekday
estaba haciendo en realidad. Pensé que establecía la variable "qué día de la semana es el primer día de la semana" (que no existe). Lo que realmente hace es simplemente cambiar el día de la semana, como moment.weekday()
, pero usa un rango 1-7 en lugar del 0-6.
javascript
momentjs
salvador
fuente
fuente
startOf('week')
depende de la ubicación actual donde el domingo obviamente marca el comienzo de la semana en su caso.startOf('iweek')
obtendrá el inicio ISO de la semana, que es el lunes. Pero tienes razón, no encontré ninguna documentación en el sitio oficial ...isoweek
.isoWeek
, con W mayúscula, en la última versiónLlame
startOf
antesisoWeekday
.Demo de trabajo
fuente
De esta forma puede configurar el día inicial de la semana.
Asegúrate de usarlo con en
moment().weekday(1);
lugar de moment.isoWeekday (1)fuente
Pensé que agregaría esto para futuros píos. Siempre se asegurará de que sea lunes si es necesario, también se puede utilizar para asegurar siempre el domingo. Para mí, siempre necesito el lunes, pero lo local depende de la máquina que se utilice, y esta es una solución fácil:
fuente
Aquí hay una solución más genérica para cualquier día de la semana. Demostración de trabajo en jsfiddle
fuente
Para aquellos que quieran
isoWeek
ser el predeterminado, pueden modificar el comportamiento del momento como tal:Ahora puedes usarlo
someDate.startOf('week')
sin preocuparte de que llegue el domingo o de tener que pensar si usarloisoweek
oisoWeek
etc.Además, puede almacenar esto en una variable como
const period = 'week'
y usarlo de manera segura en operacionessubtract()
uadd()
, por ejemplomoment().subtract(1, period).startOf(period);
. Esto no funcionará con el períodoisoWeek
.fuente