134

週を表形式で印刷するカレンダーを作成しています。1 つの要件は、一部のユーザー オプションに従って、月曜日または日曜日のいずれかに週を開始できることです。moment の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);
}

jsフィドル

編集isoWeekday私は実際に何をしていたのか誤解しました。「どの曜日が週の最初の日か」という変数が設定されていると思いました(存在しません)。実際には、 と同じように曜日を変更するだけですmoment.weekday()が、0 ~ 6 の代わりに 1 ~ 7 の範囲を使用します。

4

6 に答える 6

294

begin.startOf('isoWeek');に置き換えるだけですbegin.startOf('week');

于 2013-09-18T15:08:45.307 に答える
19

このようにして、最初の曜日を設定できます。

moment.locale('en', {
    week: {
        dow: 6
    }
});
moment.locale('en');

moment().weekday(1);moment.isoWeekday(1) の代わりに必ず使用してください

于 2018-04-24T16:07:08.917 に答える
15

startOfの前に呼び出しisoWeekdayます。

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

ワーキングデモ

于 2013-09-18T15:14:01.807 に答える
2

thought I would add this for any future peeps. It will always make sure that its monday if needed, can also be used to always ensure sunday. For me I always need monday, but local is dependant on the machine being used, and this is an easy fix:

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');
于 2015-08-18T14:43:48.067 に答える