Di mana Node.js mendapatkan zona waktunya dan bagaimana cara mengaturnya secara global?

Saya menjalankan Windows 10 Professional dan pengaturan zona waktu dan wilayah saya disetel ke Brisbane/Australia (UTC+ 10:00). Selanjutnya, saya menjalankan Node.js di sistem saya untuk aplikasi yang saya buat.

Saya menjalankan yang berikut ini di Node.js:

  var x = new Date();
  console.log(x);

Itu mengembalikan yang berikut:

2017-09-07T23:42:33.719Z

Perhatikan Z di akhir string datetime? Ini mewakili waktu Zulu. (UTC+0)

Saya berasumsi ini disetel secara default di Node.js ketika tidak ada zona waktu yang ditentukan. Bagaimana cara menentukan zona waktu secara global di Node.js untuk memastikan bahwa semua objek tanggal dikembalikan dengan benar?


person cleverpaul    schedule 08.09.2017    source sumber
comment
Tidak, Z mewakili UTC ~ en.wikipedia.org/wiki/ISO_8601#UTC. Anda melihat ini karena konsol mewakili tanggal Anda sebagai string melalui Date.prototype.toISOString(). Coba console.log(x.toString()) atau console.log(x.toLocaleString())   -  person Phil    schedule 08.09.2017
comment
Maaf, saya tidak bermaksud Anda salah mengenai waktu Zulu. Semoga tidak terjadi seperti itu   -  person Phil    schedule 08.09.2017
comment
Bukankah waktu Zulu hanyalah nama lain dari UTC (Dan keduanya diwakili oleh Z)?   -  person    schedule 08.09.2017
comment
Ada beberapa pertanyaan di sini. Apakah Anda bertanya bagaimana cara menunjukkan zona waktu lokal? Atau bagaimana cara mengatur simpul untuk menggunakan zona waktu berbeda? Atau Anda hanya ingin tahu cara kerja Node secara internal?   -  person Matt Johnson-Pint    schedule 08.09.2017
comment
@MattJohnson Ya.   -  person cleverpaul    schedule 11.09.2017


Jawaban (1)


Anda dapat mengatur TZ env ke string zona waktu.

Misalnya:

$ export TZ=Europe/Amsterdam
$ node

> Date()
'Fri Sep 08 2017 03:02:57 GMT+0200 (CEST)'


$ export TZ=America/Anchorage
$ node

> Date()
'Thu Sep 07 2017 17:04:46 GMT-0800 (AKDT)'

Anda juga dapat menyetel process.env.TZ saat runtime:

> process.env.TZ = 'Antarctica/Mawson'

> Date()
'Thu Sep 07 2017 17:11:00 GMT-0800 (+05)'

Catatan, apa pun zona waktunya, new Date() mengembalikan UTC 2017-09-08T01:05:58.103Z saat dipanggil seperti ini.

person Mark    schedule 08.09.2017
comment
Ini hanya berfungsi pada sistem *nix/OSX. Ini tidak berfungsi di Windows. OP mengatakan mereka berjalan pada Windows 10. - person Matt Johnson-Pint; 08.09.2017
comment
Hmm. Terima kasih atas klarifikasi @MattJohnson - person Mark; 08.09.2017
comment
Saya mengubah TZ seperti yang Anda katakan, tetapi saya memiliki 2 masalah. 1: zona waktu di node diubah, tetapi di pm2 aplikasi saya berfungsi seperti sebelumnya (dengan UTC). 2: ketika saya me-restart CentOs saya, TZ diatur ulang ke UTC :( - person Mahdi Tahsildari; 29.04.2019