Zona waktu default dibagi di antara semua modul:
server.js
var moment = require('moment-timezone');
console.log('sets timezone to Europe/Stockholm and locale to sv');
moment.tz.setDefault('Europe/Stockholm');
moment.locale('sv');
var moduleA = require('./moduleA');
var moduleB = require('./moduleB');
modulA.js
var moment = require('moment-timezone');
setInterval(function () {
console.log('Moment in moduleA', moment().format('MMMM Do YYYY, h:mm:ss a'));
}, 100)
modulB.js
var moment = require('moment-timezone');
setInterval(function () {
console.log('Moment in moduleB', moment().format('MMMM Do YYYY, h:mm:ss a'));
}, 100)
setInterval(function () {
console.log('Changing timezone in moduleB America/New_York locale en');
moment.tz.setDefault("America/New_York");
moment.locale('en');
}, 3000);
Keluaran setelah 3 detik:
Moment in moduleA februari 8e 2017, 9:09:19 am
Moment in moduleB februari 8e 2017, 9:09:19 am
Moment in moduleA februari 8e 2017, 9:09:19 am
Moment in moduleB februari 8e 2017, 9:09:19 am
Changing timezone in moduleB America/New_York locale en
Moment in moduleA February 8th 2017, 3:09:19 am
Moment in moduleB February 8th 2017, 3:09:19 am
Moment in moduleA February 8th 2017, 3:09:19 am
Lingkungan apa ini?
Node 4.7.3, ubuntu 14.04
Saya pikir kita harus menambahkan peringatan tentang ini di dokumen dan tidak merekomendasikan pengembang untuk tidak menggunakan fungsi ini di sistem seperti node.js.
http://momentjs.com/timezone/docs/#/using -timezones/default-timezone/
Sesuatu seperti ini:
https://github.com/mashpie/i18n-node#example -usage-in-global-scope
moment.tz.setDefault() jelas merupakan metode konfigurasi global untuk modul moment.tz
Tidak yakin apakah itu benar yang membutuhkan di simpul hanya mengimpor modul moment.timezone hanya sekali, bukan beberapa kali. Jika itu benar, maka output contoh diharapkan.
@alburthoffman Ya itu adalah output yang diharapkan, tetapi saya pikir banyak orang bisa mendapatkan masalah dengan ini di lingkungan simpul ketika modul jauh di bawah dalam daftar ketergantungan dapat melakukan sesuatu dengan setDefault dan itu akan berdampak pada semua modul yang membutuhkan (' zona waktu-saat'). Saya menghabiskan banyak waktu sebelum saya melakukannya dengan benar.
Jika kalian setuju dapatkah kami menambahkan info-teks seperti ini: https://github.com/mashpie/i18n-node#example -usage-in-global-scope tetapi kami juga dapat menutup masalah ini jika itu bukan bug .
Akan sangat bagus jika kita bisa memiliki sesuatu seperti ini:
const momentFoo = require('moment-timezone').instance();
momentFoo.tz.setDefault('foo');
const momentBar = require('moment-timezone').instance();
momentBar.tz.setDefault('bar');
momentFoo.tz() === momentBar.tz() //false
Dan untuk setiap instans memiliki konfigurasi lokalnya sendiri.
Ini juga bagus untuk aplikasi yang menggunakan Express, di mana Anda kemudian dapat membuat instans momen selama durasi permintaan, mengonfigurasinya dengan zona waktu global, dan yakinlah bahwa semua middleware Anda lainnya akan menggunakan zona waktu yang benar.
Saat ini, kita harus menetapkan zona waktu yang benar secara harfiah di 100+ tempat di basis kode kita, karena kita tidak dapat menggunakan moment.tz.setDefault()
.
Pikiran?
Anda bisa melakukannya
import moment from 'moment-timezone';
export default moment().tz('foo');
import momentFoo from '../somewhere/moment-foo';
@isair itu tidak cukup berhasil:
Uncaught TypeError: Object(...) is not a function
Tentu, kami akan mengambil PR dokumentasi di https://github.com/moment/momentjs.com
@adamreisnz - silakan ajukan tiket untuk permintaan fitur Anda di https://github.com/moment/moment-timezone
Bagaimana tepatnya #684 memperbaiki masalah ini? Ini hanya pembaruan readme untuk mengklarifikasi perilaku saat ini sejauh yang saya bisa lihat.
const estMoment = (...args) => moment(...args).tz('America/New_York')
console.log(estMoment().toDate())
console.log(moment().toDate())
Alih-alih mengatur default; kita dapat memiliki moment
untuk berbagai zona waktu (Misalnya estMoment
, mstMoment
, pstMoment
, dll) dan menggunakannya di mana-mana. Untuk ex estMoment('2020-08-12');
bukannya moment('2020-08-12');
Semoga beruntung...
Komentar yang paling membantu
Bagaimana tepatnya #684 memperbaiki masalah ini? Ini hanya pembaruan readme untuk mengklarifikasi perilaku saat ini sejauh yang saya bisa lihat.