ฉันจะตั้งค่าเขตเวลาเริ่มต้นใน node.js ได้อย่างไร
ฉันจะตั้งค่าเขตเวลาเริ่มต้นใน node.js ได้อย่างไร
คำตอบ:
ตามกลุ่มด้าย google นี้คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม TZ ก่อนที่จะเรียกฟังก์ชั่นวันที่ใด ๆ เพิ่งทดสอบและใช้งานได้
> 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)'
คุณไม่สามารถเปลี่ยนเขตเวลาได้ในภายหลังเนื่องจากตั้งแต่นั้นโหนดได้อ่านตัวแปรสภาพแวดล้อมแล้ว
process.env.TZ = 'Europe/Amsterdam'
ฉันคิดว่า "ดีตอนนี้ฉันสามารถหารายการค่าที่ใช้ได้ทั้งหมดที่ฉันสามารถตั้งค่าได้" และฉันไม่พบมันทุกครั้ง
zone.tab
ไฟล์ในไฟล์เก็บถาวรนั้น
อีกวิธีหนึ่งที่ดูเหมือนจะทำงานกับฉันอย่างน้อยในสภาพแวดล้อม Linux คือการเรียกใช้แอปพลิเคชัน Node.js ของคุณเช่นนี้
env TZ='Europe/Amsterdam' node server.js
อย่างน้อยที่สุดควรตรวจสอบให้แน่ใจว่ามีการตั้งค่าเขตเวลาอย่างถูกต้องตั้งแต่ต้น
นี่คือตัวอย่างการทำงาน 100% สำหรับการรับค่า Time Date Date Time ใน NodeJs โดยไม่ต้องใช้โมดูลภายนอก:
const nDate = new Date().toLocaleString('en-US', {
timeZone: 'Asia/Calcutta'
});
console.log(nDate);
น่าเสียดายที่การตั้งค่าprocess.env.TZ
ทำงานได้ไม่ดีนัก - โดยทั่วไปแน่นอน)
ดังนั้นการตั้งค่าเขตเวลาของระบบก่อนเริ่มต้นโหนดเป็นตัวเลือกที่เหมาะสมเท่านั้น
อย่างไรก็ตามหากคุณไม่สามารถทำได้คุณควรใช้โหนดเวลาเป็นวิธีแก้ไขปัญหา: รับเวลาของคุณในเวลาท้องถิ่นหรือเวลา UTC และแปลงให้เป็นเขตเวลาที่ต้องการ ดูวิธีใช้เขตเวลาชดเชยใน Nodejs? สำหรับรายละเอียด
โซลูชันenv TZ='Europe/Amsterdam' node server.js
จาก @uhef ทำงานในกรณีที่แอปของคุณไม่ทำงานกับกระบวนการแยก แต่เมื่อคุณทำงานด้วยกระบวนการแยกโดยเฉพาะเมื่อคุณเปิดแอปด้วยเครื่องมือสร้างเช่นอึกคำสั่งgulp
จะใช้ค่า env แต่ กระบวนการที่สร้างโดยอึกไม่ได้ (แอพของคุณ)
เพื่อแก้ปัญหานี้คุณต้องทำ:
$ export TZ="Europe/Amsterdam"; gulp myTask
นี้จะตั้งค่าTZ
ตัวแปรสภาพแวดล้อมสำหรับกระบวนการทั้งหมดที่เริ่มต้นในคอนโซลที่คุณกำลังทำงานอยู่รวมถึงกระบวนการลำดับทั้งหมดที่ดำเนินการหลังจากคำสั่ง gulp ในคอนโซลเดียวกันโดยไม่จำเป็นต้องดำเนินการด้วยคำนำหน้าexport TZ="Europe/Amsterdam";
อีกครั้ง
Etc/UTC
นอกจากนี้ยังมีการชดเชยเฉพาะที่มีอยู่ในEtc
แต่ชดเชยตรงข้ามกับสิ่งที่เราคาดหวัง Etc/GMT-1
คือ UTC + 1 ชั่วโมง ดูhttps://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ตั้งค่าเขตเวลาของเซิร์ฟเวอร์และใช้การซิงค์ NTP นี่คือทางออกที่ดีกว่าในการเปลี่ยนเวลาของเซิร์ฟเวอร์
ในการแสดงรายการเขตเวลา
timedatectl list-timezones
เพื่อกำหนดเขตเวลา
sudo timedatectl set-timezone America/New_York
ยืนยันเขตเวลา
timedatectl
ฉันชอบใช้เขตเวลา UTC สำหรับเซิร์ฟเวอร์และฐานข้อมูลของฉัน การแปลงใด ๆ จะต้องจัดการกับลูกค้า เราสามารถใช้ประโยชน์จาก moment.js ในฝั่งไคลเอ็นต์
มันจะง่ายต่อการรักษาหลาย ๆ ครั้งเช่นกัน
ฉันรู้ว่ากระทู้นี้เก่ามาก แต่ฉันคิดว่านี่จะช่วยให้ทุกคนที่ลงจอดที่นี่จาก google เช่นฉัน
ใน GAE Flex (NodeJs) คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม TZ (อันที่จัดการเขตเวลาวันที่ทั้งหมดในแอพ) ในไฟล์ app.yaml ผมฝากตัวอย่างไว้ที่นี่:
app.yaml
# [START env]
env_variables:
# Timezone
TZ: America/Argentina/Buenos_Aires
นี่คือคำตอบสำหรับผู้ที่ปรับใช้แอพลิเคชัน Node.js ที่ Amazon AWS ยืดหยุ่นฝักถั่ว ฉันไม่ได้เห็นเอกสารนี้ที่อื่น:
ภายใต้Configuration -> Software -> Environment Properties
เพียงตั้งค่าคู่คีย์TZ
และเขตเวลาของคุณเช่นAmerica/Los Angeles
และใช้การเปลี่ยนแปลง
คุณสามารถตรวจสอบผลกระทบได้ด้วยการแสดงผลnew Date().toString()
ในแอพ Node ของคุณและให้ความสนใจกับคำต่อท้ายโซนเวลา
ณ โหนด 13ตอนนี้คุณสามารถตั้งค่าซ้ำ ๆprocess.env.TZ
และมันจะปรากฏในเขตเวลาของวัตถุวันที่ใหม่ ฉันไม่รู้ว่าฉันจะใช้สิ่งนี้ในรหัสการผลิตหรือไม่ แต่มันจะมีประโยชน์ในการทดสอบหน่วย
> 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
Date
หรือโมดูลในตัวอื่น ๆ
บางครั้งคุณอาจกำลังเรียกใช้รหัสบนเซิร์ฟเวอร์เสมือนที่อื่น - ซึ่งอาจเป็นโคลนเมื่อใช้ NODEJS หรือรสชาติอื่น ๆ
นี่คือการแก้ไขที่จะช่วยให้คุณใช้เขตเวลาใดก็ได้อย่างง่ายดาย
ตรวจสอบที่นี่เพื่อดูรายการเขตเวลา
เพียงใส่วลีเขตเวลาของคุณในวงเล็บของบรรทัด FORMAT ของคุณ
ในกรณีนี้ - ฉันกำลังเปลี่ยนยุคเป็นตะวันออก
//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');
ฉันทำงานกับแพคเกจ npm นี้ระบบยูนิกซ์โซนเวลา
อัพเดตสำหรับ node.js v13
ตามที่ @Tom ชี้ให้เห็นว่าการสนับสนุน icu เต็มรูปแบบถูกสร้างขึ้นใน v13 ในขณะนี้ ดังนั้นสามารถข้ามขั้นตอนการตั้งค่าได้ คุณยังสามารถปรับแต่งวิธีที่คุณต้องการสร้างหรือใช้ icu ในขณะใช้งานจริง: https://nodejs.org/api/intl.html
สำหรับ node.js บน Windowsคุณสามารถทำสิ่งต่อไปนี้:
ติดตั้ง ICU แบบเต็มหากมีการติดตั้งซึ่งใช้ตำแหน่งวันที่อย่างถูกต้อง
npm i full-icu
หรือทั่วโลก: npm i -g full-icu
ใช้ toLocaleString () ในรหัสของคุณเช่น:
new Date().toLocaleString('en-AU', { timeZone: 'Australia/Melbourne' })
สิ่งนี้จะสร้างสิ่งที่ต้องการ: 25/02/2019, 3:19:22 pm
. หากคุณต้องการ 24 ชั่วโมง 'en-GB' จะผลิต:25/02/2019, 15:19:22
สำหรับ node.js เป็น Azure web appนอกเหนือจากการตั้งค่าแอปพลิเคชันของ WEBSITE_TIME_ZONE คุณต้องตั้งค่า NODE_ICU_DATA เช่น<your project>\node_modules\full-icu
แน่นอนหลังจากคุณทำ npm i เต็มแล้ว ไม่แนะนำให้ติดตั้งแพ็กเกจแบบโกลบอลบน Azure เนื่องจากไดเร็กทอรีนั้นเป็นแบบชั่วคราวและสามารถลบออกได้
Ref: 1. NodeJS ใช้ภาษาไม่ตรงกับวันที่
คุณสามารถกำหนดค่าเขตเวลาทั่วโลกด้วยไลบรารี tzdata:
npm install tzdata -y
หลังจากตั้งค่าสภาพแวดล้อมของคุณด้วยตัวแปรเช่น: TZ = America / Bogota
และการทดสอบในโครงการของคุณ:
new Date()
ฉันหวังว่าจะเป็นประโยชน์
คุณสามารถบังคับใช้เขตเวลากระบวนการ Node.js โดยการตั้งค่าตัวแปรสภาพแวดล้อมTZ
เป็นUTC
ดังนั้นเวลาทั้งหมดจะถูกวัดใน UTC + 00: 00
รายการทั้งหมด: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ตัวอย่าง package.json:
{
"scripts": {
"start": "TZ='UTC' node index.js"
}
}
เพียงแค่ตั้งค่าตัวแปรสภาพแวดล้อมในไฟล์หลักของคุณเช่น index.js หรือ app.js หรือ main.js หรือชื่อไฟล์ของคุณคือ:
process.env.TZ = "Aisa/Tehran";
สิ่งนี้จะตั้งค่าเขตเวลาที่จะใช้ในแอปพลิเคชันโหนดทั้งหมดของคุณ