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
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"
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
.
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.