[javascript] isoWeekday ()로 월요일에 주 시작

나는 표 형식으로 주를 인쇄하는 달력을 만들고 있습니다. 한 가지 요구 사항은 일부 사용자 옵션에 따라 월요일이나 일요일에 주를 시작할 수 있다는 것입니다. 순간의 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);
}

jsFiddle

편집 나는 isoWeekday실제로 무엇 을하고 있는지 오해했다 . 나는 그것이 “어떤 요일이주의 첫날인지”변수 (존재하지 않음)를 설정했다고 생각했다. 실제로하는 일은 단순히 요일을 변경하는 것입니다.,처럼 moment.weekday()0-6 대신 1-7 범위를 사용합니다.



답변

begin.startOf('isoWeek');대신 사용해보십시오begin.startOf('week');


답변

startOf전에 전화하십시오 isoWeekday.

var begin = moment(date).startOf('week').isoWeekday(1);

작업 데모


답변

이 방법으로 요일을 설정할 수 있습니다.

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.


답변