Saya membuat kalender tempat saya mencetak minggu dalam format tabel. Salah satu persyaratannya adalah saya dapat memulai minggu-minggu tersebut pada hari Senin atau Minggu, sesuai dengan beberapa opsi pengguna. Saya mengalami kesulitan menggunakan metode isoWeekday momen .
// 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);
}
EDIT Saya salah paham tentang apa isoWeekday
yang sebenarnya saya lakukan. Saya pikir itu menetapkan variabel "hari mana dalam seminggu yang merupakan hari pertama dalam minggu" (yang tidak ada). Apa yang sebenarnya dilakukannya hanyalah mengubah hari dalam seminggu, seperti halnya moment.weekday()
, tetapi menggunakan rentang 1-7, bukan 0-6.
javascript
momentjs
penyelamat
sumber
sumber
startOf('week')
tergantung pada lokasi saat ini di mana hari Minggu jelas menandai awal minggu dalam kasus Anda.startOf('iweek')
akan mendapatkan ISO awal minggu ini, yaitu Senin. Tapi Anda benar, saya tidak menemukan dokumentasi apapun di situs resmi ...isoweek
.isoWeek
, dengan huruf besar W, dalam versi terbaruTelepon
startOf
sebelumnyaisoWeekday
.Demo kerja
sumber
Dengan cara ini Anda dapat mengatur hari pertama dalam seminggu.
Pastikan untuk menggunakannya dengan
moment().weekday(1);
bukannya moment.isoWeekday (1)sumber
Saya pikir saya akan menambahkan ini untuk mengintip di masa depan. Itu akan selalu memastikan bahwa seninnya jika diperlukan, juga dapat digunakan untuk selalu memastikan hari minggu. Bagi saya, saya selalu membutuhkan hari Senin, tetapi lokal tergantung pada mesin yang digunakan, dan ini adalah perbaikan yang mudah:
sumber
Berikut adalah solusi yang lebih umum untuk hari kerja tertentu. Demo kerja di jsfiddle
sumber
Bagi yang ingin
isoWeek
menjadi bawaan Anda bisa mengubah tingkah laku momen seperti:Sekarang Anda dapat dengan mudah menggunakan
someDate.startOf('week')
tanpa khawatir Anda akan mendapatkan hari Minggu atau harus memikirkan apakah akan menggunakanisoweek
atauisoWeek
dll.Selain itu, Anda dapat menyimpan ini dalam variabel seperti
const period = 'week'
dan menggunakannya dengan aman dalam operasisubtract()
atauadd()
, mismoment().subtract(1, period).startOf(period);
. Ini tidak akan berhasil dengan makhluk haidisoWeek
.sumber