Estou criando um calendário onde imprimo semanas em formato tabular. Um dos requisitos é que eu possa começar as semanas na segunda ou no domingo, conforme alguma opção do usuário. Estou tendo dificuldade em usar o método isoWeekday do momento .
// 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 Eu entendi mal o que isoWeekday
estava realmente fazendo. Pensei que definisse a variável "qual dia da semana é o primeiro dia da semana" (que não existe). O que ele realmente faz é simplesmente alterar o dia da semana, assim como moment.weekday()
, mas usa um intervalo de 1-7 em vez de 0-6.
javascript
momentjs
salvador
fonte
fonte
startOf('week')
depende do local atual onde o domingo obviamente marca o início da semana no seu caso.startOf('iweek')
obterá o ISO de início da semana, que é segunda-feira. Mas você está certo, eu não encontrei nenhuma documentação no site oficial ...isoweek
.isoWeek
, com um W maiúsculo, na versão mais recenteLigue
startOf
antesisoWeekday
.Demonstração de trabalho
fonte
Desta forma, você pode definir o primeiro dia da semana.
Certifique-se de usá-lo com em
moment().weekday(1);
vez de moment.isoWeekday (1)fonte
pensei que eu adicionaria isso para qualquer pessoa no futuro. Garantirá sempre que é segunda-feira se necessário, também pode ser usado para garantir sempre domingo. Para mim, sempre preciso de segunda-feira, mas o local depende da máquina que está sendo usada e esta é uma solução fácil:
fonte
Aqui está uma solução mais genérica para qualquer dia da semana. Demonstração de trabalho no jsfiddle
fonte
Para aqueles que querem
isoWeek
ser o padrão, você pode modificar o comportamento do momento da seguinte forma:Agora você pode simplesmente usar
someDate.startOf('week')
sem se preocupar se chegará domingo ou ter que pensar se usaráisoweek
ouisoWeek
etc.Além disso, você pode armazenar isso em uma variável como
const period = 'week'
e usá-lo com segurança em operaçõessubtract()
ouadd()
, por exemplomoment().subtract(1, period).startOf(period);
. Isso não funcionará com períodoisoWeek
.fonte