मैं नोड.जेएस में डिफ़ॉल्ट टाइमज़ोन कैसे सेट कर सकता हूं?


154

मैं नोड.जेएस में डिफ़ॉल्ट टाइमज़ोन कैसे सेट करूं?


2
बहुत यकीन है कि आप वास्तव में ऐसा नहीं कर सकते। सिस्टम टाइमजोन सेटिंग्स बदलें।
thejh

1
Thejh सही है, आप समय-क्षेत्र नहीं बदल सकते। जेएस समय पुस्तकालय (जैसे क्षण.जैस) का उपयोग करें और इसके बजाय घंटे जोड़ / घटाएं।
19

2
ऐसा करने का सबसे आसान और सही तरीका है, बस अपने सिस्टम के टाइम ज़ोन को बदलना।
मुनीम

1
ये उपयोगी टिप्पणियाँ हैं, लेकिन अधिकांश समय आप सिस्टम मैनेजर नहीं हैं;)
मेरियो डे एस वेरा

जवाबों:


135

इस 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)'

आप हालांकि बाद में टाइमज़ोन नहीं बदल सकते हैं, तब से नोड पहले ही पर्यावरण चर पढ़ चुका है।


3
यह तो दिलचस्प है। बग चर्चा से पता चलता है कि यह थ्रेडिंग के साथ कुछ समस्या है। लेकिन उदाहरण कई बार process.env.TZ बदल रहा था। ऐसा लगता है कि इसे शुरुआत में एक बार सेट करना और इसे अकेला छोड़ देना काम करता है। नोड-समय के संदर्भ के लिए धन्यवाद lorancou, हालांकि, अधिक लचीले और मजबूत हैंडलिंग के लिए।
वेबजर्मग

6
अफसोस की बात है, यह खिड़कियों में काम नहीं करता है। मैक ओएस-एक्स और यूनिक्स में अच्छी तरह से काम करता है
रितेश कुमार गुप्ता

14
अच्छा उत्तर। दुर्भाग्य से, हर बार मुझे ऐसा कुछ दिखाई देता है, जो process.env.TZ = 'Europe/Amsterdam' मुझे लगता है कि "अच्छा है, अब मुझे उन सभी मान्य मूल्यों की सूची कहां मिल सकती है जिन्हें मैं सेट कर सकता हूं?" और मुझे यह नहीं मिला, हर बार।
राफेल Eyng

5
@ RafaelEyng IANA (अंतर्राष्ट्रीय असाइन किए गए नंबर एसोसिएशन) को अक्सर समय-सीमा के विन्यास के प्रावधान के लिए उपयोग किया जाता है। आप यहां नवीनतम टाइमज़ोन सेटिंग्स पा सकते हैं: ftp.iana.org/tz/tzdata-latest.tar.gz संभावित टाइमज़ोन स्ट्रिंग्स के अवलोकन के लिए zone.tabउस संग्रह में फ़ाइल की जांच करें ।
जोहान्सब

8
@ राफेलइंज: जोहान्सबी ने iana.org/time-zones का उल्लेख किया है, आधिकारिक स्रोत है, लेकिन उनके डेटा प्रारूप के साथ काम करना मुश्किल है। मुझे en.wikipedia.org/wiki/List_of_tz_database_time_zones से काम करना बहुत आसान लगता है , जो IANA डेटासेट (वर्तमान में 2017c संस्करण) से बनाया गया है।
पीटर रस्ट

66

एक अन्य दृष्टिकोण जो कम से कम लिनक्स के वातावरण में मेरे लिए काम कर रहा था, इस तरह से अपने नोड.जेएस एप्लिकेशन को चलाने के लिए है:

env TZ='Europe/Amsterdam' node server.js

यह कम से कम यह सुनिश्चित करना चाहिए कि टाइमज़ोन शुरुआत से पहले से ही सही ढंग से सेट है।


अच्छा! मेरे लिए काम करता है
रोटेम

क्या आप संस्कृतियों के लिए भी ऐसा कर सकते हैं?
जिम अहो

इसने कोड में ऐसा करने की कोशिश की तुलना में टाइमज़ोन को मजबूर करने के लिए इसे सरल बना दिया ।
डैन डस्केल्सस्कु

33

यहाँ NodeJs में किसी भी बाहरी मॉड्यूल का उपयोग किए बिना कस्टम टाइमज़ोन तिथि समय प्राप्त करने के लिए 100% काम करने का उदाहरण है:

const nDate = new Date().toLocaleString('en-US', {
  timeZone: 'Asia/Calcutta'
});

console.log(nDate);


मैं हैरान हूँ - यह बहुत उखड़ा हुआ है, लेकिन यह एक महत्वपूर्ण समस्या है IMO। नोड संस्करण <13 में केवल 'एन-यू' के लिए स्थानीय डेटा है, जिसका अर्थ है कि यह (कुछ मामलों में) फेंकता है या हर दूसरे देश के लिए गलत तारीख प्रारूप देता है। और कई मामलों में तारीख सही लगेगी लेकिन दिन और महीने की अदला-बदली होती है! और नोड 13 केवल कुछ ही सप्ताह पहले जारी किया गया था, इसलिए यह समस्या सभी पर लागू होती है।
टॉम

मैं देखता हूं कि नीचे दिए गए @ मार्शल्स का उत्तर कुछ स्थितियों में इसे हल करने का एक तरीका बताता है (लैम्ब्डा और अन्य फास में काम नहीं करेगा)।
टॉम

31

दुर्भाग्य से, सेटिंग process.env.TZवास्तव में अच्छी तरह से काम नहीं करती है - मूल रूप से यह अनिश्चित है जब परिवर्तन प्रभावी होगा)।

इसलिए नोड शुरू करने से पहले सिस्टम का टाइमज़ोन सेट करना आपका एकमात्र उचित विकल्प है।

हालाँकि, यदि आप ऐसा नहीं कर सकते हैं, तो नोड-टाइम को वर्कअराउंड के रूप में उपयोग करना संभव होना चाहिए : अपना समय स्थानीय या यूटीसी समय में प्राप्त करें, और उन्हें वांछित टाइमज़ोन में परिवर्तित करें। Nodejs में टाइमजोन ऑफसेट का उपयोग कैसे करें देखें ? ब्योरा हेतु।


1
npm मॉड्यूल समय मेरे लिए बहुत अच्छा काम किया। मैं utc पर सेट करता हूं, फिर utc का उपयोग करके हर समय सेट करता हूं, इसलिए विभिन्न टाइमज़ोन के साथ विभिन्न मशीनों के बीच कोड पोर्टेबल है।
एम। एकेडमी में मार्क शस्ट

अब इसके साथ कोई समस्या नहीं हैं, क्या कोई समस्या है?
ब्लोक

16

env TZ='Europe/Amsterdam' node server.js@Uhef से समाधान उन मामलों में काम करता है जहां आपका ऐप forked प्रक्रिया के साथ काम नहीं करता है, लेकिन जब आप forked प्रक्रिया के साथ काम कर रहे हैं, विशेष रूप से जब आप अपने ऐप को बिल्डिंग टूल जैसे gulp के साथ लॉन्च करते हैं , तो कमांड gulpenv मान लेगा, लेकिन प्रक्रिया के द्वारा बनाई गई घूंट नहीं (अपने अनुप्रयोग)।

इसे हल करने के लिए, आपको करना होगा:

$ export TZ="Europe/Amsterdam"; gulp myTask

यह TZआपके द्वारा काम किए जा रहे कंसोल में शुरू की गई सभी प्रक्रिया के लिए पर्यावरण चर को सेट करेगा , export TZ="Europe/Amsterdam";फिर से उपसर्ग के साथ उन्हें निष्पादित करने की आवश्यकता के बिना एक ही कंसोल में gulp कमांड के बाद निष्पादित सभी अनुवर्ती प्रक्रिया शामिल है ।


चूंकि एम्स्टर्डम में डीएसटी है, क्या यह अभी भी जीएमटी +1 पर "मध्यरात्रि यूटीसी" प्राप्त करने के लिए वांछनीय है?
फ्लेवर्सस्केप

1
@FlavorScape मैं उपयोग करता हूँ Etc/UTC इसमें उपलब्ध विशिष्ट ऑफ़सेट भी हैं Etc, लेकिन ऑफ़सेट इस बात से उलट है कि कोई क्या उम्मीद करेगा। Etc/GMT-1UTC + 1 घंटा है। देखेंhttps://en.wikipedia.org/wiki/List_of_tz_database_time_zones
npskirk

9

सर्वर टाइमज़ोन सेट करें और NTP सिंक का उपयोग करें। सर्वर समय बदलने के लिए यहां एक बेहतर उपाय है।

टाइमज़ोन को सूचीबद्ध करने के लिए

timedatectl list-timezones

टाइमजोन सेट करने के लिए

sudo timedatectl set-timezone America/New_York

समय क्षेत्र सत्यापित करें

timedatectl

मैं अपने सर्वर और डेटाबेस के लिए यूटीसी टाइमज़ोन का उपयोग करना पसंद करता हूं। किसी भी रूपांतरण को क्लाइंट पर नियंत्रित किया जाना चाहिए। हम ग्राहक पक्ष पर क्षणों का उपयोग कर सकते हैं।

साथ ही कई उदाहरणों को बनाए रखना आसान होगा,


2
जबकि क्षण में जे.जे. एक महान पुस्तकालय था, वर्तमान में बहुत कम विकल्प हैं (उदाहरण के लिए, तारीख़-fns )। क्षण बड़ा है ; कृपया इसे ग्राहक अनुप्रयोगों के लिए अनुशंसित न करें।
दान डैस्कलेस्क्यू

5

मुझे पता है कि यह धागा बहुत पुराना है, लेकिन मुझे लगता है कि इससे किसी को भी मेरी तरह Google से यहां पहुंचने में मदद मिलेगी।

GAE फ्लेक्स (NodeJs) में, आप en.roment वैरिएबल TZ (ऐप में सभी डेट टाइमज़ोन को मैनेज करने वाले) को app.yaml फ़ाइल में सेट कर सकते हैं, मैं आपको एक उदाहरण छोड़ता हूँ:

app.yaml

# [START env]
env_variables:
  # Timezone
  TZ: America/Argentina/Buenos_Aires

5

यहां उन लोगों के लिए एक उत्तर है जो अमेज़ॅन AWS इलास्टिक बीनस्टॉक को Node.js एप्लिकेशन को तैनात करते हैं । मैंने इस दस्तावेज को कहीं और नहीं देखा है:

इसके अंतर्गत Configuration -> Software -> Environment Properties, मुख्य कुंजी युग्म TZऔर अपना समय क्षेत्र उदा America/Los Angeles, और परिवर्तन लागू करें।

आप new Date().toString()अपने नोड ऐप में आउटपुट करके और समय क्षेत्र प्रत्यय पर ध्यान देकर प्रभाव को सत्यापित कर सकते हैं ।


3

नोड 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)'

1
यह लिनक्स / मैक पर बहुत अच्छा काम करता है, लेकिन विंडोज पर काम नहीं करता है।
नैट

नहीं, यह विंडोज के लिए भी काम करता है, उपयोग करेंset TZ='UTC' node index.js
user3896501

@ user3896501 नहीं, वह वाक्य रचना पूरी प्रक्रिया के लिए env var सेट करती है - जबकि OP के उदाहरण में नहीं चल रही है
इयान ग्रेन्जर

2

आप पल-पल का समय ले सकते हैं । यह आपको अपना स्थान निर्धारित करने देता है और दिन के समय की बचत का भी ध्यान रखता है।


2
इस तरह एक कार्य के लिए पल बहुत भारी है और मैं इसे तब तक सुझा नहीं सकता जब तक कि आप जो व्यवहार चाहते हैं वह Dateअन्य अंतर्निहित मॉड्यूल के माध्यम से संभव नहीं है ।
क्रिस विलियम्सन

2

कभी-कभी आप वर्चुअल सर्वर पर कहीं और कोड चला रहे होंगे - जो कि 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');

1

मैं इस npm पैकेज यूनिक्स-सिस्टम-टाइमज़ोन के साथ काम करता हूं


1

नोड .js v13 के लिए अद्यतन करें

जैसा कि @Tom ने बताया, पूर्ण icu समर्थन अब v13 में बनाया गया है। तो सेटअप चरणों को छोड़ा जा सकता है। आप अभी भी अनुकूलित कर सकते हैं कि आप रनटाइम में icu का निर्माण या उपयोग कैसे करना चाहते हैं: https://nodejs.org/api/intl.html

Windows पर नोड के लिए । आप निम्न कार्य कर सकते हैं:

  1. यदि यह स्थापित किया गया है, तो फुल-आईकयू स्थापित करें, जो तारीख के स्थानों को ठीक से लागू करता है

    npm i full-icu या विश्व स्तर पर: npm i -g full-icu

  2. अपने कोड में toLocaleString () का उपयोग करें, जैसे:

    new Date().toLocaleString('en-AU', { timeZone: 'Australia/Melbourne' })

    यह कुछ इस तरह का उत्पादन होगा 25/02/2019, 3:19:22 pm:। यदि आप 24 घंटे पसंद करते हैं, तो 'एन-जीबी' का उत्पादन होगा:25/02/2019, 15:19:22

WEBSITE_TIME_ZONE की एप्लिकेशन सेटिंग के अलावा, Azure वेब ऐप के रूप में node.js के लिए , आपको उदाहरण के लिए NODE_ICU_DATA भी सेट करना होगा<your project>\node_modules\full-icu , निश्चित रूप i पूर्ण-आईसीयू करने के बाद। Azure पर वैश्विक रूप से पैकेज स्थापित करने का सुझाव नहीं दिया गया है क्योंकि यह निर्देशिका अस्थायी है और इसे मिटा दिया जा सकता है।

Ref: 1. NodeJS तारीख स्थानों को ठीक से लागू नहीं कर रहा है

  1. आप int.l विकल्प के साथ नोड.जेएस भी बना सकते हैं, यहां अधिक जानकारी

1
पूर्ण-आईसीयू को v13 के मानक / आधिकारिक बिल्ड में शामिल किया गया है, इसलिए उपरोक्त कदम अब आवश्यक नहीं होंगे।
टॉम

1

आप लाइब्रेरी tzdata के साथ ग्लोबल टाइमज़ोन को कॉन्फ़िगर कर सकते हैं:

npm install tzdata -y

उदाहरण के लिए चर के साथ अपने वातावरण को सेट करने के बाद: TZ = अमेरिका / बोगोटा

और अपनी परियोजना में परीक्षण:

new Date()

मुझे आशा है कि helpyou


1

आप पर्यावरण चर TZको सेट करके Node.js प्रक्रिया टाइमज़ोन लागू कर सकते हैंUTC

तो सभी समय यूटीसी + 00: 00 में मापा जाएगा

पूरी सूची: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

उदाहरण के पैकेज ।json:

{
  "scripts": {
    "start": "TZ='UTC' node index.js"
  }
}

यह विंडोज पर काम नहीं करता है। आप इस तरह से TZ env var सेट नहीं कर सकते। और यदि आप टीबी सेट करते हैं, तो इसे नोड के डिफ़ॉल्ट टाइमज़ोन के रूप में मान्यता नहीं दी जाएगी।
नैट

-1

अपनी मुख्य फ़ाइल जैसे index.js या app.js या main.js या जो भी आपकी फ़ाइल का नाम है, में बस पर्यावरण चर सेट करें:

process.env.TZ = "Aisa/Tehran";

यह आपके पूरे नोड एप्लिकेशन में उपयोग किए जाने वाले टाइमज़ोन को सेट करेगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.