Moment: Masalah lokal Hari Minggu

Dibuat pada 15 Jul 2017  ·  7Komentar  ·  Sumber: moment/moment

Deskripsi Masalah dan Langkah Reproduksi:
Seperti dalam dokumen resmi,
moment.locale('zh_CN');
moment.weekdays(true); // lists weekdays Monday-Sunday in Chinese
Jika benar, hari kerja akan dikembalikan dalam urutan khusus lokal. Tetapi dalam kasus ini, saat lokal diubah secara global.

Jadi jika saya hanya ingin mengubah lokal secara lokal, saya menggunakan
moment.localeData('zh_CN').weekdaysShort()
Itu selalu mencantumkan hari kerja dari Minggu-Sabtu dalam bahasa Cina (TIDAK dalam urutan khusus lokal). Dan saya tidak dapat memberikan nilai 'benar' pada fungsi dalam kasus ini (Menyebabkan ERROR).

Harap sertakan nilai dari semua variabel yang digunakan.

Lingkungan Hidup:

Contoh: Chrome 49 di OSX, Internet Explorer 10 di Windows 7, Node.JS 4.4.4 di Ubuntu 16.0.4

Baik browser dan OS penting bagi kami, terutama jika Anda memiliki lingkungan yang tidak biasa seperti aplikasi IOT.

Informasi lain yang mungkin berguna:

  • Pengaturan zona waktu mesin yang menjalankan kode code
  • Waktu dan tanggal saat kode dijalankan
  • Pustaka lain yang digunakan (TypeScript, Immutable.js, dll)

Jika Anda melaporkan masalah, jalankan kode berikut di lingkungan yang Anda gunakan dan sertakan hasilnya:

console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)

Pastikan masalah Anda terisolasi hingga saat ini.

Bug Language

Komentar yang paling membantu

Informasi yang menarik adalah bahwa fungsi weekday bersifat lokal, jadi

const weekdays = [0, 1, 2, 3, 4, 5, 6].map(dow => moment().locale('en-gb').weekday(dow).format('dddd'))

mengembalikan ['Sunday', 'Monday', ...] untuk en-us .
tapi ['Monday', 'Tuesday', ...] untuk en-gb .

Semua 7 komentar

Hmm, saya tidak bisa mereproduksi ini. Saya pikir Anda mengatakan ini:

moment.locale('en') //=> "en" (I don't have the locale set to zh)

// you're saying this is NOT in the right order
moment.localeData('zh_CN').weekdays(); //=> ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]

//but if you change the global locale, then it is
moment.locale('zh_CN'); //=> "zh-cn"
moment.weekdays() //=> ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]

Saya tidak akan terkejut jika itu berfungsi seperti yang Anda katakan (localeData langsung mendapatkan data, jadi tidak mengherankan jika itu tidak melakukan penataan ulang, dan mungkin kami tidak memiliki API untuk mendapatkan hari kerja yang dipesan untuk lokal yang tidak diatur secara global). Tapi ... bukankah array di atas itu sama? Saya tidak membaca atau berbicara bahasa Cina jadi tidak tahu apakah mereka dalam urutan yang benar secara lokal, tetapi kecuali saya kehilangan sesuatu (selalu mungkin ketika melihat karakter yang tidak dikenal) keduanya atau keduanya tidak, benar ?

Itu sama dengan "en-gb" dan "en-us".

Jika lokal saya adalah 'en-us' dan saya ingin mendapatkan 'en-gb' hari kerja, termasuk penyortiran, saya akan dipaksa untuk mengubah lokal secara global atau melakukan beberapa pekerjaan array untuk mendapatkan hari kerja yang diurutkan.

moment.locale('en-us')
moment.weekdays(true) // ["Sunday", "Monday", ...

moment.locale('en-gb')
moment.weekdays(true) // ["Monday", "Tuesday", ...

Tapi

moment.localeData('en-us').weekdays() // ["Sunday", "Monday", ...

moment.localeData('en-gb').weekdays() // ["Sunday", "Monday", ...

Dan tidak ada

moment.localeData('en-gb').weekdays(true)

Hmm, ya, saya menyebut ini bug.

Informasi yang menarik adalah bahwa fungsi weekday bersifat lokal, jadi

const weekdays = [0, 1, 2, 3, 4, 5, 6].map(dow => moment().locale('en-gb').weekday(dow).format('dddd'))

mengembalikan ['Sunday', 'Monday', ...] untuk en-us .
tapi ['Monday', 'Tuesday', ...] untuk en-gb .

Saya melakukan beberapa penggalian.

Ada fungsi berbeda yang mengimplementasikan <Moment>.weekdays vs <Locale>.weekdays (dan juga weekdaysMin, weekdaysShort, month, monthShort)

Seperti disebutkan dalam dokumen, yang pertama dirancang untuk mencantumkan bulan atau hari kerja lokal saat ini.
https://momentjs.com/docs/#/i18n/listing -months-weekdays/

Yang kedua dirancang untuk mendapatkan informasi dari lokal itu sendiri.
https://momentjs.com/docs/#/i18n/locale -data/

Kami dapat mengurutkan lokal hari kerja dengan parameter yang sama.

  • Jadi, moment.localeData('en-gb').weekdays(true) akan mengembalikan ['Monday', 'Tuesday', ...] ).
  • Saya pikir ini masuk akal karena panggilan ini menimbulkan kesalahan dalam versi Momen saat ini.

Saya telah memasang PR - beri tahu saya pendapat Anda semua.

Apakah ada rencana untuk memperbaiki moment().locale('en-us').weekday(0) agar kembali Senin dan bukan Minggu?

@inbalg Tidak, itu benar

Apakah halaman ini membantu?
0 / 5 - 0 peringkat