Làm cách nào để đặt múi giờ mặc định trong node.js?
Làm cách nào để đặt múi giờ mặc định trong node.js?
Câu trả lời:
Theo chủ đề nhóm google này , bạn có thể đặt biến môi trường TZ trước khi gọi bất kỳ hàm ngày nào. Chỉ cần thử nghiệm và nó hoạt động.
> 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)'
Tuy nhiên, bạn không thể thay đổi múi giờ sau đó, kể từ đó, Node đã đọc biến môi trường.
process.env.TZ = 'Europe/Amsterdam'
tôi nghĩ "tốt đẹp, bây giờ tôi có thể tìm thấy danh sách tất cả các giá trị hợp lệ mà tôi có thể đặt ở đâu?" và tôi không tìm thấy nó, mỗi lần.
zone.tab
tệp trong kho lưu trữ đó.
Một cách tiếp cận khác có vẻ hiệu quả với tôi ít nhất là trong môi trường Linux là chạy ứng dụng Node.js của bạn như thế này:
env TZ='Europe/Amsterdam' node server.js
Điều này ít nhất phải đảm bảo rằng múi giờ đã được đặt chính xác ngay từ đầu.
Dưới đây là một ví dụ hoạt động 100% để nhận múi giờ tùy chỉnh Ngày giờ trong NodeJ mà không cần sử dụng bất kỳ mô-đun bên ngoài nào:
const nDate = new Date().toLocaleString('en-US', {
timeZone: 'Asia/Calcutta'
});
console.log(nDate);
Thật không may, cài đặt process.env.TZ
không hoạt động thực sự tốt - về cơ bản là không xác định khi thay đổi sẽ có hiệu lực).
Vì vậy, thiết lập múi giờ của hệ thống trước khi bắt đầu nút là tùy chọn thích hợp duy nhất của bạn.
Tuy nhiên, nếu bạn không thể làm điều đó, có thể sử dụng thời gian nút như một cách giải quyết: lấy thời gian của bạn theo giờ địa phương hoặc UTC và chuyển đổi chúng thành múi giờ mong muốn. Xem Làm thế nào để sử dụng bù múi giờ trong Nodejs? để biết chi tiết.
Giải pháp env TZ='Europe/Amsterdam' node server.js
từ @uhef hoạt động trong trường hợp ứng dụng của bạn không hoạt động với quy trình rẽ nhánh, nhưng khi bạn đang làm việc với quy trình rẽ nhánh, đặc biệt khi bạn khởi chạy ứng dụng của mình bằng công cụ xây dựng như gulp , lệnh gulp
sẽ lấy các giá trị env, nhưng quá trình được tạo bởi gulp không (ứng dụng của bạn).
Để giải quyết điều này, bạn phải làm:
$ export TZ="Europe/Amsterdam"; gulp myTask
Điều này sẽ đặt TZ
biến môi trường cho tất cả quá trình bắt đầu trong bàn điều khiển bạn đang làm việc, bao gồm tất cả các quy trình tiếp theo được thực hiện sau lệnh gulp trong cùng bàn điều khiển mà không cần phải thực hiện lại chúng với tiền tố export TZ="Europe/Amsterdam";
.
Etc/UTC
Ngoài ra còn có các phần bù cụ thể có sẵn Etc
, nhưng phần bù lại ngược với những gì người ta mong đợi. Etc/GMT-1
là UTC + 1 giờ. Xemhttps://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Đặt múi giờ của máy chủ và sử dụng đồng bộ hóa NTP. Đây là một giải pháp tốt hơn để thay đổi thời gian máy chủ.
Để liệt kê các múi giờ
timedatectl list-timezones
Để đặt múi giờ
sudo timedatectl set-timezone America/New_York
Xác nhận múi giờ
timedatectl
Tôi thích sử dụng múi giờ UTC cho các máy chủ và cơ sở dữ liệu của tôi. Bất kỳ chuyển đổi phải được xử lý trên máy khách. Chúng tôi có thể sử dụng khoảnh khắc.js ở phía máy khách.
Nó sẽ dễ dàng để duy trì nhiều trường hợp là tốt,
Tôi biết chủ đề này rất cũ, nhưng tôi nghĩ rằng điều này sẽ giúp bất cứ ai đã đến đây từ google như tôi.
Trong GAE Flex (NodeJs), bạn có thể đặt biến môi trường TZ (biến quản lý tất cả các múi giờ ngày trong ứng dụng) trong tệp app.yaml, tôi để lại cho bạn một ví dụ:
ứng dụng
# [START env]
env_variables:
# Timezone
TZ: America/Argentina/Buenos_Aires
Đây là câu trả lời cho những người đang triển khai ứng dụng Node.js lên Beanstalk của Amazon AWS . Tôi chưa thấy tài liệu này ở bất cứ nơi nào khác:
Trong Configuration -> Software -> Environment Properties
, chỉ cần đặt cặp giá trị khóa TZ
và múi giờ của bạn America/Los Angeles
, vd và Áp dụng thay đổi.
Bạn có thể xác minh hiệu ứng bằng cách xuất ra new Date().toString()
trong ứng dụng Node của mình và chú ý đến hậu tố múi giờ.
Kể từ Nút 13 , bây giờ bạn có thể liên tục thiết lập process.env.TZ
và nó sẽ được phản ánh trong múi giờ của các đối tượng Ngày mới. Tôi không biết nếu tôi sử dụng mã này trong mã sản xuất nhưng nó chắc chắn sẽ hữu ích trong các thử nghiệm đơn vị.
> 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
Bạn có thể mất múi giờ . Nó cho phép bạn đặt vị trí của mình và cũng chăm sóc thời gian tiết kiệm ánh sáng ban ngày.
Date
hoặc các mô đun dựng sẵn khác.
Đôi khi bạn có thể đang chạy mã trên máy chủ ảo ở nơi khác - Điều đó có thể trở nên lầy lội khi chạy NODEJS hoặc các hương vị khác.
Đây là một sửa chữa sẽ cho phép bạn sử dụng bất kỳ múi giờ dễ dàng.
Kiểm tra danh sách các múi giờ ở đây
Chỉ cần đặt cụm từ múi giờ của bạn trong dấu ngoặc của dòng FORMAT của bạn.
Trong trường hợp này - tôi đang chuyển đổi EPOCH sang phương Đông.
//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');
tôi làm việc với gói npm unix-system-timezone này
Cập nhật cho node.js v13
Như @Tom đã chỉ ra, hỗ trợ icu đầy đủ được xây dựng trong v13 ngay bây giờ. Vì vậy, các bước thiết lập có thể được bỏ qua. Bạn vẫn có thể tùy chỉnh cách bạn muốn xây dựng hoặc sử dụng icu trong thời gian chạy: https://nodejs.org/api/intl.html
Đối với node.js trên Windows , bạn có thể làm như sau:
Cài đặt full-icu nếu nó đã được cài đặt, áp dụng đúng địa điểm ngày
npm i full-icu
hoặc trên toàn cầu: npm i -g full-icu
Sử dụng toLocaleString () trong mã của bạn, ví dụ:
new Date().toLocaleString('en-AU', { timeZone: 'Australia/Melbourne' })
Điều này sẽ tạo ra một cái gì đó như : 25/02/2019, 3:19:22 pm
. Nếu bạn thích 24 giờ, 'en-GB' sẽ tạo ra:25/02/2019, 15:19:22
Đối với node.js dưới dạng ứng dụng web Azure , ngoài cài đặt ứng dụng của WEBSITE_TIME_ZONE, bạn cũng cần đặt NODE_ICU_DATA thành <your project>\node_modules\full-icu
, ví dụ , sau khi bạn đã thực hiện npm i full-icu. Việc cài đặt gói trên toàn cầu trên Azure không được đề xuất vì thư mục đó là tạm thời và có thể bị xóa.
Tham chiếu: 1. NodeJS không áp dụng đúng địa điểm ngày
Bạn có thể cấu hình múi giờ toàn cầu với thư viện tzdata:
npm install tzdata -y
Sau khi đặt môi trường của bạn với biến, ví dụ: TZ = America / Bogota
Và thử nghiệm trong dự án của bạn:
new Date()
Tôi hy vọng giúp bạn
Bạn có thể thực thi múi giờ xử lý Node.js bằng cách đặt biến môi trường TZ
thànhUTC
Vì vậy, tất cả thời gian sẽ được đo bằng UTC + 00: 00
Danh sách đầy đủ: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Ví dụ gói.json:
{
"scripts": {
"start": "TZ='UTC' node index.js"
}
}
chỉ cần đặt biến môi trường trong tệp chính của bạn như index.js hoặc app.js hoặc main.js hoặc bất kỳ tên tệp nào của bạn là:
process.env.TZ = "Aisa/Tehran";
điều này sẽ đặt múi giờ sẽ được sử dụng trong toàn bộ ứng dụng nút của bạn