আমি কীভাবে node.js এ ডিফল্ট টাইমজোন সেট করতে পারি?


154

আমি কীভাবে node.js এ ডিফল্ট টাইমজোন সেট করব?


2
খুব নিশ্চিত যে আপনি এটি সত্যিই করতে পারবেন না। সিস্টেমের সময় অঞ্চল সেটিংস পরিবর্তন করুন।
thejh

1
thejh ঠিক আছে, আপনি সময় অঞ্চল পরিবর্তন করতে পারবেন না। একটি জেএস টাইম লাইব্রেরি (যেমন moment.js) ব্যবহার করুন এবং এর পরিবর্তে ঘন্টাগুলি যোগ / বিয়োগ করুন।
এলেসিয়োএলেক্স

2
এটি করার সবচেয়ে সহজ এবং সঠিক উপায় হ'ল কেবল আপনার সিস্টেমের সময় অঞ্চল পরিবর্তন করা।
মুনিম

1
এগুলি দরকারী মন্তব্য তবে বেশিরভাগ সময় আপনি সিস্টেম ম্যানেজার নন;)
মারিও ডি সা ভেরা

উত্তর:


135

এই গুগল গ্রুপ থ্রেড অনুসারে , কোনও তারিখ ফাংশন কল করার আগে আপনি টিজেড পরিবেশ পরিবর্তনশীল সেট করতে পারেন। শুধু এটি পরীক্ষা করা হয়েছে এবং এটি কাজ করে।

> 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 পরিবর্তন করা। দেখে মনে হচ্ছে এটি একবারে সেট করার পরে এটি একা রেখে কাজ করে। নোড-টাইম রেফারেন্সের জন্য লোরঙ্কুকে ধন্যবাদ, যদিও আরও নমনীয় এবং শক্তিশালী হ্যান্ডলিংয়ের জন্য।
webjprgm

6
দুঃখের বিষয়, এটি উইন্ডোতে কাজ করে না। ম্যাক ওএস-এক্স এবং ইউনিক্সে ভাল কাজ করে
রিতেশ কুমার গুপ্ত

14
চমৎকার উত্তর. দুর্ভাগ্যক্রমে, প্রতিটি সময় আমি এমন কিছু দেখতে পাই যা process.env.TZ = 'Europe/Amsterdam' আমার মনে হয় "সুন্দর, এখন আমি যে সমস্ত বৈধ মান নির্ধারণ করতে পারি তার তালিকা কোথায় পাব ?" এবং আমি এটি প্রতিটি বার খুঁজে পাই না।
রাফায়েল আইং

5
@ রাফায়েলইং আইএএনএ (আন্তর্জাতিক নির্ধারিত নম্বর সমিতি) প্রায়শই আপ টু ডেট টাইমজোন কনফিগারেশনের ব্যবস্থা করার জন্য ব্যবহৃত হয়। আপনি এখানে সর্বশেষতম সময় অঞ্চল সেটিংস খুঁজে পেতে পারেন: ftp.iana.org/tz/tzdata-latest.tar.gz সম্ভাব্য টাইমজোন স্ট্রিংগুলির একটি সংক্ষিপ্তসার জন্য zone.tabthat সংরক্ষণাগারে ফাইলটি পরীক্ষা করুন ।
জোহানেসবি

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

কোনও বহিরাগত মডিউল ব্যবহার না করে নোডজেজে কাস্টম টাইমজোন তারিখের সময় পাওয়ার জন্য এখানে একটি 100% কার্যকারী উদাহরণ রয়েছে:

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

console.log(nDate);


আমি বিস্মিত - এটি খুব উজ্জীবিত তবে এটির একটি জটিল সমস্যা রয়েছে আইএমও। নোড সংস্করণ <১৩ টিতে কেবলমাত্র 'এন-ইউএস' এর জন্য স্থানীয় ডেটা রয়েছে যার অর্থ এটি ছোঁড়া (কিছু ক্ষেত্রে) বা অন্য দেশের জন্য ভুল তারিখের ফর্ম্যাট দেয়। এবং অনেক ক্ষেত্রে তারিখটি সঠিক দেখাবে তবে দিন ও মাস অদলবদল হয়! এবং নোড 13 মাত্র কয়েক সপ্তাহ আগে মুক্তি পেয়েছিল তাই এই সমস্যাটি প্রায় সকলের জন্য প্রযোজ্য।
টম

আমি দেখতে পাচ্ছি যে নীচে @ মার্শালের উত্তরগুলি কিছু পরিস্থিতিতে (ল্যাম্বদা এবং অন্যান্য ফাসে কাজ করবে না) এটি সমাধানের একটি উপায় প্রস্তাব করে।
টম

31

দুর্ভাগ্যক্রমে, সেটিংটি process.env.TZসত্যিই ভাল কাজ করে না - মূলত এটি অনির্দিষ্ট হয় যখন পরিবর্তন কার্যকর হবে)।

নোড শুরুর আগে সিস্টেমের টাইমজোনটি নির্ধারণ করা আপনার একমাত্র যথাযথ বিকল্প।

তবে, যদি আপনি এটি না করতে পারেন তবে নোড- টাইমকে একটি কাজের ভিত্তিতে ব্যবহার করা সম্ভব হবে : আপনার সময় স্থানীয় বা ইউটিসি সময়গুলিতে পান এবং সেগুলি পছন্দসই সময় অঞ্চলে রূপান্তর করুন। নোডেজে টাইমজোন অফসেট কীভাবে ব্যবহার করবেন দেখুন ? বিস্তারিত জানার জন্য.


1
এনপিএম মডিউল সময়টি আমার জন্য দুর্দান্ত কাজ করেছে। আমি ইউটিসি সেট করেছিলাম, তারপরে ইউটিসি ব্যবহার করে সব সময় সেট করি, তাই কোডটি বিভিন্ন টাইমজোন সহ বিভিন্ন মেশিনের মধ্যে পোর্টেবল হয়।
মার্ক শস্ট এম.কেডেমি

এটি নিয়ে আর কোনও সমস্যা নেই, আছে কি?
ব্লক

16

env TZ='Europe/Amsterdam' node server.js@ ইউহেফের সমাধান সেই ক্ষেত্রে কার্যকর হয় যেখানে আপনার অ্যাপ্লিকেশনটি কাঁটাচামচ প্রক্রিয়া নিয়ে কাজ করে না, তবে আপনি যখন কাঁটাচামচ প্রক্রিয়া নিয়ে কাজ করছেন, বিশেষত যখন আপনি অ্যাপ্লিকেশনটিকে গল্পের মতো বিল্ডিং সরঞ্জাম দিয়ে লঞ্চ করেন তখন কমান্ডটি gulpএনভির মানগুলি গ্রহণ করবে তবে প্রক্রিয়া গুল্প দ্বারা তৈরি করা হয়নি (আপনার অ্যাপ্লিকেশন)।

এটি সমাধান করার জন্য আপনাকে এগুলি করতে হবে:

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

এটি TZযে কনসোলে আপনি কাজ করছেন তাতে শুরু হওয়া সমস্ত প্রক্রিয়াটির জন্য পরিবেশের পরিবর্তনশীল সেট করবে , gulp কমান্ডের পরে সম্পাদিত সমস্ত পরবর্তী প্রক্রিয়া একই উপায়ে export TZ="Europe/Amsterdam";আবার উপসর্গের সাথে চালানোর প্রয়োজন ছাড়াই অন্তর্ভুক্ত করবে ।


যেহেতু আমস্টারডামের ডিএসটি রয়েছে, জিএমটি +১ এ "মিডনাইট ইউটিসি" অর্জন করা কি এখনও এই কাম্য টিজেড?
ফ্ল্যাওয়ারস্কেপ

1
আমি ব্যবহৃত ফ্ল্যাওয়ারস্কেপ Etc/UTC এখানে নির্দিষ্ট অফসেটগুলি উপলভ্য রয়েছে Etcতবে অফসেটটি যেটি প্রত্যাশা করবে তার বিপরীত। Etc/GMT-1ইউটিসি + 1 ঘন্টা। দেখুনhttps://en.wikipedia.org/wiki/List_of_tz_database_time_zones
npskirk

9

সার্ভারের সময় অঞ্চল সেট করুন এবং এনটিপি সিঙ্ক ব্যবহার করুন। সার্ভারের সময় পরিবর্তন করার জন্য এটির একটি আরও ভাল সমাধান।

সময় অঞ্চলগুলি তালিকাভুক্ত করতে

timedatectl list-timezones

টাইমজোন সেট করতে

sudo timedatectl set-timezone America/New_York

সময় অঞ্চল যাচাই করুন

timedatectl

আমি আমার সার্ভার এবং ডাটাবেসগুলির জন্য ইউটিসি টাইমজোন ব্যবহার করতে পছন্দ করি। যে কোনও রূপান্তর অবশ্যই ক্লায়েন্টের উপর পরিচালনা করা উচিত। আমরা ক্লায়েন্ট পক্ষের moment.js ব্যবহার করতে পারি।

অনেকগুলি উদাহরণ বজায় রাখাও সহজ হবে,


2
যদিও moment.js আগের দিনটিতে একটি দুর্দান্ত গ্রন্থাগার ছিল, বর্তমানে এর চেয়ে অনেক ছোট বিকল্প রয়েছে (যেমন ডেট-এফএনএস )। মুহুর্ত বিশাল ; দয়া করে ক্লায়েন্ট অ্যাপ্লিকেশনগুলির জন্য এটি সুপারিশ করবেন না।
ড্যান ড্যাসক্লেস্কু

5

আমি জানি যে এই থ্রেডটি অনেক পুরানো, তবে আমি মনে করি এটি আমার মতো গুগল থেকে এখানে পৌঁছে যে কাউকে সহায়তা করবে।

জিএই ফ্লেক্স (নোডজেস) এ, আপনি অ্যাপ্লায়ার ফাইলটিতে এনভায়ারোমেন্ট ভেরিয়েবল টিজেড (অ্যাপ্লিকেশনটিতে সমস্ত তারিখের সময়সীমা পরিচালনা করে এমন এক) সেট করতে পারেন, আমি এখানে একটি উদাহরণ রেখেছি:

app.yaml

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

5

আমাজন এডাব্লুএস ইলাস্টিক বিয়ানস্টালকে নোড.জেএস অ্যাপ্লিকেশন মোতায়েনকারীদের জন্য এখানে একটি উত্তর । আমি এই নথিটি অন্য কোথাও দেখিনি:

এর অধীনে 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
এটি লিনাক্স / ম্যাকের ক্ষেত্রে দুর্দান্ত কাজ করে তবে উইন্ডোজে কাজ করে না।
Nate

না এটি উইন্ডোজের পক্ষেও কার্যকর নয়, ব্যবহার করুনset TZ='UTC' node index.js
ব্যবহারকারীর 3896501

@ ব্যবহারকারীর 3896501 না, সেই সিনট্যাক্স পুরো প্রক্রিয়াটির জন্য এনভির ভার সেট করে - ওপির উদাহরণের মতো চলার সময় নয় ।
আয়ান গ্রেঞ্জার

2

আপনি মুহুর্তের সময় অঞ্চল নিতে পারেন । এটি আপনাকে আপনার অবস্থান সেট করতে দেয় এবং দিবালোক সংরক্ষণের সময়ও যত্ন করে।


2
এই জাতীয় কোনও কাজের জন্য মুহুর্তটি বেশ ভারী ওজনযুক্ত এবং আপনি যে আচরণটি চান তা Dateবা অন্য বিল্টিন মডিউলগুলির মাধ্যমে সম্ভব না হলে আমি এটির সুপারিশ করব না ।
ক্রিস উইলিয়ামসন

2

কখনও কখনও আপনি ভার্চুয়াল সার্ভারে অন্য কোথাও কোড চালাচ্ছেন - NODEJS বা অন্যান্য স্বাদগুলি চলাকালীন তা কর্দমাক্ত হতে পারে।

এখানে একটি স্থিরতা রয়েছে যা আপনাকে যে কোনও সময় অঞ্চল সহজেই ব্যবহার করতে দেয়।

সময় অঞ্চলগুলির তালিকার জন্য এখানে চেক করুন

আপনার ফরমাট লাইনের বন্ধনীগুলির মধ্যে আপনার টাইম জোনের বাক্যটি লিখুন।

এই ক্ষেত্রে - আমি ইপোকটিকে পূর্বাঞ্চলে রূপান্তর করছি।

//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

আমি এই এনপিএম প্যাকেজটি ইউনিক্স-সিস্টেম-টাইমজোন দিয়ে কাজ করি


1

নোড.জেএস ভি 13 এর জন্য আপডেট

যেমনটি টম উল্লেখ করেছেন, সম্পূর্ণ আইকিউ সমর্থন এখন v13 এ নির্মিত built সুতরাং সেটআপ ধাপগুলি বাদ দেওয়া যেতে পারে। আপনি কীভাবে রানটাইমে আইকিউ তৈরি করতে বা ব্যবহার করতে চান তা এখনও কাস্টমাইজ করতে পারেন: https://nodejs.org/api/intl.html

উইন্ডোজে নোড.জেএস এর জন্য আপনি নিম্নলিখিতগুলি করতে পারেন:

  1. পূর্ণ-আইকিউ ইনস্টল করা থাকলে এটি ইনস্টল করুন, যা সঠিকভাবে তারিখের লোকাল প্রয়োগ করে

    npm i full-icu বা বিশ্বব্যাপী: npm i -g full-icu

  2. আপনার কোডে লোকালস্ট্রিং () ব্যবহার করুন, যেমন:

    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 এর অ্যাপ্লিকেশন সেটিংস ছাড়াও, আপনাকে <your project>\node_modules\full-icuঅবশ্যই NODE_ICU_DATA সেট করতে হবে , অবশ্যই আপনি এনপিএম i পূর্ণ-আইকিউ করার পরে। অজুরেতে প্যাকেজটি বিশ্বব্যাপী ইনস্টল করার পরামর্শটি প্রস্তাবিত নয় কারণ ডিরেক্টরিটি অস্থায়ী এবং মুছতে পারে।

রেফার্স : 1. নোডজেএস সঠিকভাবে তারিখের লোকেল প্রয়োগ করছে না

  1. আপনি এখানে আরও তথ্যের জন্য ইন্টেল বিকল্পগুলির সাথে নোড.জেগুলিও তৈরি করতে পারেন

1
v13 হিসাবে নোডের স্ট্যান্ডার্ড / অফিসিয়াল বিল্ডগুলিতে ফুল-আইকিউ অন্তর্ভুক্ত রয়েছে সুতরাং উপরের পদক্ষেপগুলি আর প্রয়োজন হবে না।
টম

1

আপনি লাইব্রেরি tzdata দিয়ে গ্লোবাল টাইমজোন কনফিগার করতে পারেন:

npm install tzdata -y

আপনার পরিবেশটি ভেরিয়েবলের সাথে উদাহরণস্বরূপ সেট করার পরে: টিজেড = আমেরিকা / বোগোতা

এবং আপনার প্রকল্পে পরীক্ষা:

new Date()

আমি আশা করি


1

আপনি পরিবেশের পরিবর্তনশীলকে সেট করে নোড.জেএস প্রক্রিয়া টাইমজোনকে প্রয়োগ করতে TZপারেনUTC

সুতরাং সমস্ত সময় UTC + 00: 00 এ পরিমাপ করা হবে

সম্পূর্ণ তালিকা: https://en.wikedia.org/wiki/List_of_tz_database_Time_zones

উদাহরণ প্যাকেজ.জসন:

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

এটি উইন্ডোজে কাজ করে না। আপনি এইভাবে টিজেড এনভির ভার সেট করতে পারবেন না। এবং যদি আপনি টিজেড সেট করেন তবে এটি নোডের ডিফল্ট টাইমজোন হিসাবে স্বীকৃত হবে না।
নাট

-1

আপনার প্রধান ফাইল যেমন ইন্ডেক্স.জেএস বা অ্যাপ.জেস বা মেইন.জেএস বা আপনার ফাইলের নাম যাই হোক না কেন কেবল পরিবেশের পরিবর্তনশীল সেট করুন:

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

এটি টাইমজোনটি সেট করবে যা আপনার সম্পূর্ণ নোড অ্যাপ্লিকেশনটিতে ব্যবহৃত হবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.