Node.js รับเขตเวลาได้จากที่ไหน และฉันจะตั้งค่าทั่วโลกได้อย่างไร

ฉันใช้ Windows 10 Professional และการตั้งค่าเขตเวลาและภูมิภาคของฉันเป็นบริสเบน/ออสเตรเลีย (UTC+ 10:00) นอกจากนี้ ฉันกำลังใช้งาน Node.js บนระบบของฉันสำหรับแอปพลิเคชันที่ฉันกำลังสร้าง

ฉันรันสิ่งต่อไปนี้ใน Node.js:

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

มันส่งคืนสิ่งต่อไปนี้:

2017-09-07T23:42:33.719Z

สังเกตเห็น Z ที่ท้ายสตริง datetime หรือไม่? นี่แสดงถึงเวลาซูลู (UTC+0)

ฉันคิดว่าสิ่งนี้ถูกตั้งค่าเป็นค่าเริ่มต้นใน Node.js เมื่อไม่ได้ระบุเขตเวลา ฉันจะระบุเขตเวลาทั่วโลกใน Node.js เพื่อให้แน่ใจว่าวัตถุวันที่ทั้งหมดส่งคืนอย่างถูกต้องได้อย่างไร


person cleverpaul    schedule 08.09.2017    source แหล่งที่มา
comment
ไม่ Z หมายถึง UTC ~ en.wikipedia.org/wiki/ISO_8601#UTC คุณเห็นสิ่งนี้เนื่องจากคอนโซลแสดงวันที่ของคุณเป็นสตริงผ่าน Date.prototype.toISOString() ลอง console.log(x.toString()) หรือ console.log(x.toLocaleString())   -  person Phil    schedule 08.09.2017
comment
ขออภัย ฉันไม่ได้หมายความว่าคุณผิดเกี่ยวกับเวลาซูลู หวังว่าคงไม่เจอแบบนั้นนะ   -  person Phil    schedule 08.09.2017
comment
เวลาซูลูเป็นเพียงอีกชื่อหนึ่งของ UTC (และทั้งสองแสดงด้วย Z) ไม่ใช่หรือ   -  person    schedule 08.09.2017
comment
มีคำถามหลายข้อที่นี่ คุณกำลังถามว่าจะแสดงเขตเวลาท้องถิ่นได้อย่างไร? หรือจะตั้งค่าโหนดให้ใช้เขตเวลา แตกต่าง ได้อย่างไร หรือคุณเพียงต้องการทราบว่า Node ทำงานภายในอย่างไร?   -  person Matt Johnson-Pint    schedule 08.09.2017
comment
@MattJohnson ใช่   -  person cleverpaul    schedule 11.09.2017


คำตอบ (1)


คุณสามารถตั้งค่า TZ env เป็นสตริงเขตเวลาได้

ตัวอย่างเช่น:

$ 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)'

คุณยังสามารถตั้งค่า process.env.TZ ตอนรันไทม์ได้:

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

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

โปรดทราบว่าโดยไม่คำนึงถึงเขตเวลา new Date() จะส่งกลับ UTC 2017-09-08T01:05:58.103Z เมื่อเรียกเช่นนี้

person Mark    schedule 08.09.2017
comment
ใช้งานได้กับระบบ *nix/OSX เท่านั้น มันไม่ทำงานบน Windows OP กล่าวว่าพวกเขากำลังทำงานบน Windows 10 - person Matt Johnson-Pint; 08.09.2017
comment
อืม. ขอบคุณสำหรับการชี้แจง @MattJohnson - person Mark; 08.09.2017
comment
ฉันเปลี่ยน TZ ตามที่คุณบอก แต่ฉันมีปัญหา 2 ข้อ 1: เขตเวลาในโหนดมีการเปลี่ยนแปลง แต่ใน pm2 แอพของฉันทำงานเหมือนเมื่อก่อน (ด้วย UTC) 2: เมื่อฉันรีสตาร์ท CentO ของฉัน TZ จะถูกรีเซ็ตเป็น UTC :( - person Mahdi Tahsildari; 29.04.2019