Moment: Nomor minggu yang salah dikembalikan dari fungsi "minggu ()"

Dibuat pada 19 Jul 2018  ·  5Komentar  ·  Sumber: moment/moment

Deskripsi Masalah dan Langkah Reproduksi:
Saat membuat tanggal, misalnya [2018, 11, 29] , dan menjalankan fungsi week hasilnya adalah 52 , tetapi untuk [2018, 11, 30] dan untuk 31 juga mengembalikan 1 . Hasil yang diharapkan adalah 52 .

Contoh

const a = moment([2018, 11, 29]);
console.log('a', a.year(), a.week());
//a 2018 52

const b = moment([2018, 11, 30]);
console.log('b', b.year(), b.week());
//b 2018 1

contoh langsung jsbin

Lingkungan:
Safari 11.1.2 on OSX

Informasi lain yang mungkin berguna:

"Thu Jul 19 2018 16:52:11 GMT+0200 (CEST)"
"7/19/2018, 4:52:11 PM"
-120
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15"
"2.14.1"

Komentar yang paling membantu

Saya pikir Anda mungkin memiliki harapan tentang cara kerja penomoran minggu yang berbeda dari praktik yang sudah ada.

misalnya Anda berpikir 1 Januari selalu di minggu 1, dan 31 Desember selalu di minggu 52/53 - dan, agar adil, beberapa kalender dinding memang menunjukkan penomoran minggu seperti itu.

Dalam hal standarisasi angka minggu, preferensinya adalah memastikan bahwa satu minggu selalu berisi 7 hari. Untuk standar ISO: minggu berjalan dari Senin-Minggu, dan minggu 1 berisi hari Kamis pertama dalam setahun. Artinya Senin-Rabu minggu 1 _may_ jatuh pada tahun sebelumnya. (ini akan terjadi pada 2019/2020: 29-31 Desember 2019 dianggap sebagai bagian dari Minggu 1 tahun 2020)

Anda tidak menggunakan metode ISO ( isoWeek() / isoWeekYear() ), jadi Anda mengandalkan definisi lokal tentang minggu, yang berjalan dari Minggu - Sabtu.

30 Desember 2018 adalah hari Minggu, dan hari pertama dalam seminggu di tempat Anda. Hanya 2 hari dari minggu itu yang jatuh pada tahun 2018, sisanya adalah pada tahun 2019. Aturan untuk lokal Anda digunakan untuk memutuskan apakah minggu itu (semua 7 hari) digolongkan sebagai 2018 minggu 53, atau 2019 minggu 1. Dalam kasus Anda , mereka mengatakan 2019 minggu 1.

Semua 5 komentar

Kami menghadapi masalah yang sama.
console.log(moment("2018-w15", "YYYY-[w]WW").add(38, "weeks").format("YYYY-[w]WW"))
menunjukkan 2018-w01

@numen31337 Anda mungkin ingin menggunakan weekYear() daripada year()

@Blapi WW adalah Minggu ISO, jadi kemungkinan besar Anda perlu menggunakan GGGG daripada YYYY saat memformat ( GGGG adalah "Tahun Minggu" ISO )

Saya akan mengklarifikasi ini sedikit, berikut adalah kode dengan tanggal dan output terkait:

const a = moment([2018, 11, 29]);
console.log(
            `a year: ${a.year()}`,  //a year: 2018
            `a month: ${a.month()}`, //a month: 11
            `a date: ${a.date()}`, //a date: 29
            `a week: ${a.week()}`, //a week: 52
            `a weekYear: ${a.weekYear()}`, //a weekYear: 2018
);

const b = moment([2018, 11, 30]);
console.log(
            `b year: ${b.year()}`, //b year: 2018
            `b month: ${b.month()}`, //b month: 11
            `b date: ${b.date()}`, //b date: 30
            `b week: ${b.week()}`, //b week: 1 <=== Why 1?
            `b weekYear: ${b.weekYear()}`, //b weekYear: 2019 <=== Why 2019?
);

Masalah bagi saya adalah week for 2018, 11, 30 mengembalikan 1 alih-alih 52 . Mungkin saya salah memahami beberapa konsep perpustakaan ini? Dalam jangka panjang, tugas saya adalah menghitung jumlah minggu kalender antara dua tanggal dan saya telah melakukan ini dengan solusi berikut:

const fromDateStartWeek = fromDate.startOf('week');
const toDateStartWeek = toDate.startOf('week');
return toDateStartWeek.diff(fromDateStartWeek, 'weeks');

Tapi saya masih bingung tentang fungsi week . Apakah ini bug atau saya melewatkan sesuatu? Saya berasal dari pengembangan asli dan cukup baru di javascript. Terima kasih.

Saya pikir Anda mungkin memiliki harapan tentang cara kerja penomoran minggu yang berbeda dari praktik yang sudah ada.

misalnya Anda berpikir 1 Januari selalu di minggu 1, dan 31 Desember selalu di minggu 52/53 - dan, agar adil, beberapa kalender dinding memang menunjukkan penomoran minggu seperti itu.

Dalam hal standarisasi angka minggu, preferensinya adalah memastikan bahwa satu minggu selalu berisi 7 hari. Untuk standar ISO: minggu berjalan dari Senin-Minggu, dan minggu 1 berisi hari Kamis pertama dalam setahun. Artinya Senin-Rabu minggu 1 _may_ jatuh pada tahun sebelumnya. (ini akan terjadi pada 2019/2020: 29-31 Desember 2019 dianggap sebagai bagian dari Minggu 1 tahun 2020)

Anda tidak menggunakan metode ISO ( isoWeek() / isoWeekYear() ), jadi Anda mengandalkan definisi lokal tentang minggu, yang berjalan dari Minggu - Sabtu.

30 Desember 2018 adalah hari Minggu, dan hari pertama dalam seminggu di tempat Anda. Hanya 2 hari dari minggu itu yang jatuh pada tahun 2018, sisanya adalah pada tahun 2019. Aturan untuk lokal Anda digunakan untuk memutuskan apakah minggu itu (semua 7 hari) digolongkan sebagai 2018 minggu 53, atau 2019 minggu 1. Dalam kasus Anda , mereka mengatakan 2019 minggu 1.

Terimakasih atas klarifikasinya. Itu benar-benar mengejutkan bagi saya. Saya sangat merindukan API seperti dari Apple Calendar dateComponents(_:from:to:) di mana Anda dapat meminta perbedaan dalam komponen tertentu, dalam kasus saya Calendar.current.dateComponents([.weekOfYear], from: sinceDay, to: targetDay) dan menerima perbedaan dalam minggu-minggu nyata tahun ini, bukan hanya days / 7 .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat