Bagaimana cara mengatur zona waktu default di node.js?
Bagaimana cara mengatur zona waktu default di node.js?
Jawaban:
Menurut utas grup Google ini , Anda dapat mengatur variabel lingkungan TZ sebelum memanggil fungsi tanggal apa pun. Hanya mengujinya dan berfungsi.
> process.env.TZ = 'Europe/Amsterdam'
'Europe/Amsterdam'
> d = new Date()
Sat, 24 Mar 2012 05:50:39 GMT
> d.toLocaleTimeString()
'06:50:39'
> ""+d
'Sat Mar 24 2012 06:50:39 GMT+0100 (CET)'
Namun Anda tidak dapat mengubah zona waktu, karena saat itu Node sudah membaca variabel lingkungan.
process.env.TZ = 'Europe/Amsterdam'
saya pikir "bagus, sekarang di mana saya dapat menemukan daftar semua nilai yang valid yang dapat saya tetapkan?" dan saya tidak menemukannya, setiap saat.
zone.tab
file di arsip itu.
Pendekatan lain yang sepertinya paling cocok untuk saya di lingkungan Linux adalah menjalankan aplikasi Node.js Anda seperti ini:
env TZ='Europe/Amsterdam' node server.js
Ini setidaknya harus memastikan bahwa zona waktu sudah diatur dengan benar dari awal.
Berikut adalah contoh kerja 100% untuk mendapatkan zona waktu kustom Tanggal Waktu di NodeJs tanpa menggunakan modul eksternal:
const nDate = new Date().toLocaleString('en-US', {
timeZone: 'Asia/Calcutta'
});
console.log(nDate);
Sayangnya, pengaturan process.env.TZ
tidak berfungsi dengan baik - pada dasarnya pengaturan tidak pasti saat perubahan akan efektif).
Jadi pengaturan zona waktu sistem sebelum memulai node adalah satu-satunya pilihan yang tepat.
Namun, jika Anda tidak bisa melakukan itu, Anda harus menggunakan simpul-waktu sebagai solusi: dapatkan waktu Anda dalam waktu lokal atau UTC, dan ubah ke zona waktu yang diinginkan. Lihat Bagaimana menggunakan offset zona waktu di Nodejs? untuk detail.
Solusi env TZ='Europe/Amsterdam' node server.js
dari @uhef bekerja dalam kasus di mana aplikasi Anda tidak bekerja dengan proses bercabang, tetapi ketika Anda bekerja dengan proses bercabang, khususnya ketika Anda meluncurkan aplikasi Anda dengan alat bangunan seperti tegukan , perintah gulp
akan mengambil nilai env, tetapi proses yang dibuat oleh tegukan bukan (aplikasi Anda).
Untuk mengatasi ini, Anda harus melakukan:
$ export TZ="Europe/Amsterdam"; gulp myTask
Ini akan mengatur TZ
variabel lingkungan untuk semua proses yang dimulai di konsol yang sedang Anda kerjakan, termasuk semua proses selanjutnya yang dijalankan setelah perintah tegukan dalam konsol yang sama tanpa perlu menjalankannya dengan awalan export TZ="Europe/Amsterdam";
lagi.
Etc/UTC
Ada juga offset khusus yang tersedia di Etc
, tetapi offset adalah kebalikan dari apa yang diharapkan. Etc/GMT-1
adalah UTC + 1 jam. Lihathttps://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Tetapkan zona waktu server dan gunakan sinkronisasi NTP. Berikut adalah satu solusi yang lebih baik untuk mengubah waktu server.
Untuk membuat daftar zona waktu
timedatectl list-timezones
Untuk mengatur zona waktu
sudo timedatectl set-timezone America/New_York
Verifikasi zona waktu
timedatectl
Saya lebih suka menggunakan zona waktu UTC untuk server dan database saya. Setiap konversi harus ditangani pada klien. Kita dapat memanfaatkan moment.js di sisi klien.
Akan mudah untuk memelihara banyak contoh juga,
Saya tahu utas ini sangat lama, tetapi saya pikir ini akan membantu siapa pun yang mendarat di sini dari google seperti saya.
Dalam GAE Flex (NodeJs), Anda dapat mengatur variabel lingkungan TZ (yang mengatur semua zona waktu tanggal dalam aplikasi) dalam file app.yaml, saya memberikan contoh di sini:
app.yaml
# [START env]
env_variables:
# Timezone
TZ: America/Argentina/Buenos_Aires
Berikut jawaban bagi mereka yang menggunakan aplikasi Node.js ke Amazon AWS Elastic Beanstalk . Saya belum melihat ini didokumentasikan di tempat lain:
Di bawah Configuration -> Software -> Environment Properties
, cukup atur pasangan nilai kunci TZ
dan zona waktu Anda mis. America/Los Angeles
, Dan Terapkan perubahan.
Anda dapat memverifikasi efeknya dengan mengeluarkan new Date().toString()
di aplikasi Node Anda dan memperhatikan akhiran zona waktu.
Pada Node 13 , Anda sekarang dapat berulang kali mengatur process.env.TZ
dan itu akan tercermin dalam zona waktu objek Tanggal baru. Saya tidak tahu apakah saya akan menggunakan ini dalam kode produksi tetapi pasti akan berguna dalam unit test.
> process.env.TZ = 'Europe/London';
'Europe/London'
> (new Date().toString())
'Fri Mar 20 2020 09:39:59 GMT+0000 (Greenwich Mean Time)'
> process.env.TZ = 'Europe/Amsterdam';
'Europe/Amsterdam'
> (new Date().toString())
'Fri Mar 20 2020 10:40:07 GMT+0100 (Central European Standard Time)'
set TZ='UTC' node index.js
Anda dapat mengambil zona waktu sesaat . Ini memungkinkan Anda mengatur lokasi Anda dan juga mengurus waktu musim panas.
Date
atau modul builtin lainnya.
Kadang-kadang Anda mungkin menjalankan kode pada server virtual di tempat lain - Itu bisa menjadi becek saat menjalankan NODEJS atau rasa lainnya.
Ini adalah perbaikan yang memungkinkan Anda menggunakan zona waktu dengan mudah.
Periksa di sini untuk daftar zona waktu
Cukup masukkan frasa zona waktu Anda di dalam kurung baris FORMAT Anda.
Dalam hal ini - saya mengonversi EPOCH ke Eastern.
//RE: https://www.npmjs.com/package/date-and-time
const date = require('date-and-time');
let unixEpochTime = (seconds * 1000);
const dd=new Date(unixEpochTime);
let myFormattedDateTime = date.format(dd, 'YYYY/MM/DD HH:mm:ss A [America/New_York]Z');
let myFormattedDateTime24 = date.format(dd, 'YYYY/MM/DD HH:mm:ss [America/New_York]Z');
saya bekerja dengan paket npm ini unix-system-timezone
Perbarui untuk node.js v13
Seperti yang ditunjukkan @Tom, dukungan icu penuh dibangun di v13 sekarang. Jadi langkah-langkah pengaturan bisa dihilangkan. Anda masih dapat menyesuaikan bagaimana Anda ingin membangun atau menggunakan icu di runtime: https://nodejs.org/api/intl.html
Untuk node.js di Windows , Anda dapat melakukan hal berikut:
Instal full-icu jika telah diinstal, yang berlaku tanggal lokal dengan benar
npm i full-icu
atau secara global: npm i -g full-icu
Gunakan toLocaleString () dalam kode Anda, misalnya:
new Date().toLocaleString('en-AU', { timeZone: 'Australia/Melbourne' })
Ini akan menghasilkan sesuatu seperti: 25/02/2019, 3:19:22 pm
. Jika Anda lebih suka 24 jam, 'en-GB' akan menghasilkan:25/02/2019, 15:19:22
Untuk node.js sebagai aplikasi web Azure , selain pengaturan aplikasi WEBSITE_TIME_ZONE, Anda juga perlu mengatur NODE_ICU_DATA ke eg<your project>\node_modules\full-icu
, tentu saja setelah Anda melakukan npm i full-icu. Menginstal paket secara global di Azure tidak disarankan karena direktori itu bersifat sementara dan dapat dihapus.
Ref: 1. NodeJS tidak menerapkan tanggal lokal dengan benar
Anda dapat mengkonfigurasi zona waktu global dengan tzdata perpustakaan:
npm install tzdata -y
Setelah mengatur lingkungan Anda dengan variabel misalnya: TZ = America / Bogota
Dan pengujian dalam proyek Anda:
new Date()
Saya harap membantu kamu
Anda bisa menerapkan zona waktu proses Node.js dengan mengatur variabel lingkungan TZ
keUTC
Jadi semua waktu akan diukur dalam UTC + 00: 00
Daftar lengkap: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Contoh package.json:
{
"scripts": {
"start": "TZ='UTC' node index.js"
}
}
cukup setel variabel lingkungan di file utama Anda seperti index.js atau app.js atau main.js atau apa pun nama file Anda:
process.env.TZ = "Aisa/Tehran";
ini akan mengatur zona waktu yang akan digunakan di seluruh aplikasi simpul Anda