나는 표 형식으로 주를 인쇄하는 달력을 만들고 있습니다. 한 가지 요구 사항은 일부 사용자 옵션에 따라 월요일이나 일요일에 주를 시작할 수 있다는 것입니다. 순간의 isoWeekday 방법을 사용하는 데 어려움을 겪고 있습니다.
// 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);
}
편집 나는 isoWeekday
실제로 무엇 을하고 있는지 오해했다 . 나는 그것이 “어떤 요일이주의 첫날인지”변수 (존재하지 않음)를 설정했다고 생각했다. 실제로하는 일은 단순히 요일을 변경하는 것입니다.,처럼 moment.weekday()
0-6 대신 1-7 범위를 사용합니다.
답변
begin.startOf('isoWeek');
대신 사용해보십시오begin.startOf('week');
답변
답변
이 방법으로 요일을 설정할 수 있습니다.
moment.locale('en', {
week: {
dow: 6
}
});
moment.locale('en');
moment().weekday(1);
moment.isoWeekday (1) 대신 사용하십시오.
답변
앞으로의 친구들을 위해 이것을 추가 할 것이라고 생각했습니다. 필요한 경우 월요일을 항상 확인하여 항상 일요일을 보장하는 데 사용할 수 있습니다. 나에게는 항상 월요일이 필요하지만 로컬은 사용되는 컴퓨터에 따라 다르며 이것은 쉬운 수정입니다.
var begin = moment().isoWeekday(1).startOf('week');
var begin2 = moment().startOf('week');
// could check to see if day 1 = Sunday then add 1 day
// my mac on bst still treats day 1 as sunday
var firstDay = moment().startOf('week').format('dddd') === 'Sunday' ?
moment().startOf('week').add('d',1).format('dddd DD-MM-YYYY') :
moment().startOf('week').format('dddd DD-MM-YYYY');
document.body.innerHTML = '<b>could be monday or sunday depending on client: </b><br />' +
begin.format('dddd DD-MM-YYYY') +
'<br /><br /> <b>should be monday:</b> <br>' + firstDay +
'<br><br> <b>could also be sunday or monday </b><br> ' +
begin2.format('dddd DD-MM-YYYY');
답변
다음은 주어진 평일에 대한보다 일반적인 솔루션입니다. jsfiddle의 작업 데모
var myIsoWeekDay = 2; // say our weeks start on tuesday, for monday you would type 1, etc.
var startOfPeriod = moment("2013-06-23T00:00:00"),
// how many days do we have to substract?
var daysToSubtract = moment(startOfPeriod).isoWeekday() >= myIsoWeekDay ?
moment(startOfPeriod).isoWeekday() - myIsoWeekDay :
7 + moment(startOfPeriod).isoWeekday() - myIsoWeekDay;
// subtract days from start of period
var begin = moment(startOfPeriod).subtract('d', daysToSubtract);
답변
isoWeek
기본값이 되고자하는 사람들을 위해 다음과 같이 순간의 동작을 수정할 수 있습니다.
const moment = require('moment');
const proto = Object.getPrototypeOf(moment());
const {startOf, endOf} = proto;
proto.startOf = function(period) {
if (period === 'week') {
period = 'isoWeek';
}
return startOf.call(this, period);
};
proto.endOf = function(period) {
if (period === 'week') {
period = 'isoWeek';
}
return endOf.call(this, period);
};
이제 당신은 someDate.startOf('week')
일요일이 될까 걱정하지 않고 사용 isoweek
하거나 사용 할지 isoWeek
등 을 생각할 필요없이 간단하게 사용할 수 있습니다 .
또한 이것을 같은 변수에 저장 const period = 'week'
하고 subtract()
또는 add()
작업 에서 안전하게 사용할 수 moment().subtract(1, period).startOf(period);
있습니다. 이것은 기간 인 경우 작동하지 않습니다 isoWeek
.