किसी विशेष समय क्षेत्र के लिए जावास्क्रिप्ट तिथि को कैसे आरंभ करें


232

मेरे पास एक विशेष टाइमज़ोन में एक स्ट्रिंग के रूप में तारीख का समय है और मैं इसे स्थानीय समय में बदलना चाहता हूं। लेकिन, मुझे पता नहीं है कि दिनांक ऑब्जेक्ट में टाइमज़ोन कैसे सेट करें।

उदाहरण के लिए, मेरे पास Feb 28 2013 7:00 PM ET,तब मैं कर सकता हूं

var mydate = new Date();
mydate.setFullYear(2013);
mydate.setMonth(02);
mydate.setDate(28);
mydate.setHours(7);
mydate.setMinutes(00);  

जहां तक ​​मुझे पता है, मैं या तो यूटीसी समय या स्थानीय समय निर्धारित कर सकता हूं। लेकिन, मैं दूसरे समयक्षेत्र में समय कैसे निर्धारित करूं?

मैंने यूटीसी से ऑफसेट को जोड़ने / घटाने का उपयोग करने की कोशिश की लेकिन मुझे नहीं पता कि दिन की बचत का मुकाबला कैसे करें। यकीन नहीं होता कि मैं सही दिशा में जा रहा हूं।

मैं एक अलग समयक्षेत्र से स्थानीय समय को जावास्क्रिप्ट में परिवर्तित करने के बारे में कैसे जा सकता हूं?



1
दिनांक ऑब्जेक्ट्स में टाइमज़ोन नहीं है, वे UTC हैं।
रॉब

जवाबों:


351

पृष्ठभूमि

जावास्क्रिप्ट का DateUTC में वस्तु समय को आंतरिक रूप से ट्रैक करती है, लेकिन आमतौर पर इनपुट को स्वीकार करती है और इसके द्वारा चलाए जा रहे कंप्यूटर के स्थानीय समय में आउटपुट उत्पन्न करती है। अन्य समय क्षेत्रों में समय के साथ काम करने के लिए इसमें बहुत कम सुविधाएं हैं।

किसी Dateऑब्जेक्ट का आंतरिक प्रतिनिधित्व एक एकल संख्या है, जो 1970-01-01 00:00:00 UTCलीप सेकंड की परवाह किए बिना, मिलीसेकंड की संख्या का प्रतिनिधित्व करती है । दिनांक ऑब्जेक्ट में कोई समय क्षेत्र या स्ट्रिंग प्रारूप संग्रहीत नहीं है। जब के विभिन्न कार्यDate ऑब्जेक्ट के उपयोग किया जाता है, तो कंप्यूटर का स्थानीय समय क्षेत्र आंतरिक प्रतिनिधित्व पर लागू होता है। यदि फ़ंक्शन एक स्ट्रिंग का उत्पादन करता है, तो उस स्ट्रिंग का उत्पादन कैसे करें, यह निर्धारित करने के लिए कंप्यूटर की स्थानीय जानकारी पर ध्यान दिया जा सकता है। विवरण प्रति फ़ंक्शन अलग-अलग होते हैं, और कुछ कार्यान्वयन-विशिष्ट होते हैं।

Dateगैर-स्थानीय समय क्षेत्रों के साथ ऑब्जेक्ट केवल वही कार्य कर सकता है:

  • यह किसी भी समय क्षेत्र से एक संख्यात्मक UTC ऑफसेट युक्त स्ट्रिंग को पार्स कर सकता है। इसका उपयोग पार्स किए जा रहे मूल्य को समायोजित करने के लिए करता है, और यूटीसी समकक्ष को संग्रहीत करता है। मूल स्थानीय समय और ऑफसेट परिणामी Dateवस्तु में बरकरार नहीं हैं । उदाहरण के लिए:

    var d = new Date("2020-04-13T00:00:00.000+08:00");
    d.toISOString()  //=> "2020-04-12T16:00:00.000Z"
    d.valueOf()      //=> 1586707200000  (this is what is actually stored in the object)
  • ECMASCript अंतर्राष्ट्रीयकरण एपीआई (उर्फ "Intl") को लागू करने वाले वातावरण में , एक Dateवस्तु एक निश्चित समय क्षेत्र पहचानकर्ता के लिए समायोजित स्थानीय-विशिष्ट स्ट्रिंग का उत्पादन कर सकती है। यह timeZoneविकल्प toLocaleStringऔर इसकी विविधताओं के माध्यम से पूरा किया जाता है । अधिकांश कार्यान्वयन IANA समय क्षेत्र पहचानकर्ताओं का समर्थन करेंगे, जैसे कि 'America/New_York'। उदाहरण के लिए:

    var d = new Date("2020-04-13T00:00:00.000+08:00");
    d.toLocaleString('en-US', { timeZone: 'America/New_York' })
    //=> "4/12/2020, 12:00:00 PM"
    // (midnight in China on Apring 13th is noon in New York on April 12th)

    अधिकांश आधुनिक वातावरण IANA समय क्षेत्र पहचानकर्ताओं के पूर्ण सेट का समर्थन करते हैं ( यहां संगतता तालिका देखें )। हालांकि, ध्यान रखें कि Intl द्वारा समर्थित एकमात्र पहचानकर्ता आवश्यक है 'UTC', इस प्रकार आपको पुराने ब्राउज़र या atypical वातावरण (उदाहरण के लिए, हल्के IoT डिवाइस) का समर्थन करने की आवश्यकता होने पर सावधानीपूर्वक जांच करनी चाहिए।

पुस्तकालय

कई पुस्तकालय हैं जिनका उपयोग समय क्षेत्रों के साथ काम करने के लिए किया जा सकता है। हालांकि वे अभी भी Dateवस्तु को किसी भी तरह से व्यवहार नहीं कर सकते हैं , वे आम तौर पर मानक IANA टाइमज़ोन डेटाबेस को लागू करते हैं और जावास्क्रिप्ट में इसका उपयोग करने के लिए कार्य प्रदान करते हैं। आधुनिक लाइब्रेरी Intl API द्वारा आपूर्ति किए गए समय क्षेत्र के डेटा का उपयोग करते हैं, लेकिन पुराने पुस्तकालयों में आमतौर पर ओवरहेड होता है, खासकर यदि आप वेब ब्राउज़र में चल रहे हैं, क्योंकि डेटाबेस थोड़ा बड़ा हो सकता है। इन पुस्तकालयों में से कुछ भी आपको डेटा सेट को चुनिंदा रूप से कम करने की अनुमति देते हैं, या तो जिस समय तक ज़ोन का समर्थन किया जाता है और / या आपके द्वारा काम करने की तारीखों की सीमा तक।

यहाँ पुस्तकालयों पर विचार करना है:

Intl- आधारित पुस्तकालय

नए विकास को इनमें से किसी एक कार्यान्वयन से चुनना चाहिए, जो अपने समय क्षेत्र डेटा के लिए Intl API पर निर्भर है:

गैर-अंतर्देशीय पुस्तकालय

इन पुस्तकालयों को बनाए रखा जाता है, लेकिन पैकेजिंग का बोझ अपने समय क्षेत्र के डेटा पर ले जाता है, जो काफी बड़ा हो सकता है।

* जबकि मोमेंट और मोमेंट-टाइमज़ोन पहले अनुशंसित थे, मोमेंट टीम अब नए विकास के लिए लक्सॉन को चुनती है।

पुस्तकालयों को बंद कर दिया

इन पुस्तकालयों को आधिकारिक रूप से बंद कर दिया गया है और अब इनका उपयोग नहीं किया जाना चाहिए।

भविष्य के प्रस्ताव

TC39 टेम्पोरल प्रस्ताव उद्देश्य जावास्क्रिप्ट भाषा अपने आप में दिनांक और समय के साथ काम करने के लिए मानक वस्तुओं का एक नया सेट प्रदान करते हैं। इसमें टाइम ज़ोन जागरूक ऑब्जेक्ट के लिए समर्थन शामिल होगा।


1
कृपया "प्रतिनिधित्व" को "आउटपुट / पार्स" में बदलें, क्योंकि प्रतिनिधित्व टाइमस्टैम्प समय-स्वतंत्र हैं
बर्गी

1
@ बर्गी - मैंने इस पर पुनर्विचार किया है, और आपसे सहमत हूँ। तदनुसार मेरा उत्तर अपडेट करें।
मैट जॉनसन-पिंट

1
जब आप फायरबग कंसोल में ऐसा करते हैं: (एईएस में मेरे लिए) var date_time = new Date()का मान date_timeहै Date {Sun Aug 21 2016 22:18:47 GMT+1000 (AEST)}और इसलिए ऐसा लगता है कि इसने एक टाइमज़ोन संग्रहीत किया है। मैं यह कैसे सुनिश्चित कर सकता हूं कि date_timeविशुद्ध रूप से यूटीसी समय, बिना किसी समयक्षेत्र के शामिल है?
user1063287

हम्म, इस उत्तर के अनुसार ( stackoverflow.com/a/8047885/1063287 ), यह इस प्रकार है: new Date().getTime();
user1063287

1
@ user1063287- toString विधि मेजबान समय क्षेत्र "स्थानीय" समय क्षेत्र में एक तारीख और समय के उत्पादन के लिए ऑफसेट का उपयोग करता है। दिनांक ऑब्जेक्ट का स्वयं का समय मान है जो 1970-01-01T00: 00: 00Z से ऑफसेट है, इसलिए प्रभावी रूप से UTC। UTC दिनांक और समय देखने के लिए, toISOString का उपयोग करें
रॉबग

69

जैसा कि मैट जॉनसन ने कहा था

यदि आप अपने उपयोग को आधुनिक वेब ब्राउज़र तक सीमित कर सकते हैं, तो अब आप बिना किसी विशेष पुस्तकालयों के निम्नलिखित कर सकते हैं:

new Date().toLocaleString("en-US", {timeZone: "America/New_York"})

यह एक व्यापक समाधान नहीं है, लेकिन यह कई परिदृश्यों के लिए काम करता है जिनके लिए केवल आउटपुट रूपांतरण (यूटीसी या स्थानीय समय से एक विशिष्ट समय क्षेत्र की आवश्यकता होती है, लेकिन दूसरी दिशा नहीं)।

इसलिए यद्यपि ब्राउज़र डेट बनाते समय IANA टाइमज़ोन नहीं पढ़ सकता है, या किसी मौजूदा डेट ऑब्जेक्ट पर टाइमज़ोन को बदलने के लिए कोई भी तरीका है, ऐसा लगता है कि इसके आसपास एक हैक है:

function changeTimezone(date, ianatz) {

  // suppose the date is 12:00 UTC
  var invdate = new Date(date.toLocaleString('en-US', {
    timeZone: ianatz
  }));

  // then invdate will be 07:00 in Toronto
  // and the diff is 5 hours
  var diff = date.getTime() - invdate.getTime();

  // so 12:00 in Toronto is 17:00 UTC
  return new Date(date.getTime() + diff);

}

// E.g.
var there = new Date();
var here = changeTimezone(there, "America/Toronto");

console.log(`Here: ${here.toString()}\nToronto: ${there.toString()}`);


6
मैं सोच रहा हूं कि इस उत्तर को अधिक प्यार क्यों नहीं मिल रहा है। मेरे उद्देश्यों के लिए यह पूरी तरह से सबसे अच्छा समाधान है। मेरे ऐप में, सभी तिथियां UTC हैं, लेकिन उन्हें UI में स्पष्ट IANA टाइमज़ोन में इनपुट या आउटपुट होना चाहिए। इस उद्देश्य के लिए मैं इस समाधान का उपयोग करता हूं और यह पूरी तरह से काम करता है। सरल, प्रभावी, मानक।
logidelic

2
@logidelic यह एक बहुत नई पोस्ट है। ईमानदार होने के लिए, मुझे खुद पर आश्चर्य हुआ जब इसने मुझे मारा आप toLocaleStringरिवर्स प्रभाव को प्राप्त करने के लिए उपयोग कर सकते हैं , और हाँ, यह सामान्य ज्ञान होना चाहिए! इसके बारे में एक लेख लिखिए और मुझे बताइए :-)
14:36

1
एक नोड वातावरण के लिए, जो पहले से GMT में नहीं है, उपरोक्त कोड को var invate = new Date (date.toLocaleString ('en-US', {timeZone: ianatz}) से बदलने की आवश्यकता है; var invdate = new Date ($ {date.toLocaleString ('en-US', {timeZone: ianatz})} GMT`);
माइक पी।

5
ब्राउज़रों को tolocaleString के आउटपुट को पार्स करने की आवश्यकता नहीं है , इसलिए यह एक दोषपूर्ण आधार पर आधारित है।
RobG

3
"... इस उत्तर को अधिक प्यार क्यों नहीं मिल रहा है?" - क्योंकि Dateयह जो वस्तु लौटाता है वह झूठ है। यहां तक ​​कि उदाहरण दिखाया गया है, स्ट्रिंग आउटपुट में स्थानीय मशीन का समय क्षेत्र शामिल है। मेरे कंप्यूटर पर, दोनों परिणाम "GMT-0700 (पैसिफ़िक डेलाइट टाइम)" कहते हैं, जहां यह केवल पहले वाले के लिए सही है (टोरंटो वास्तव में पूर्वी समय में है।) केवल स्ट्रिंग आउटपुट के अलावा, Dateऑब्जेक्ट के भीतर आयोजित टाइमस्टैम्प है। समय में एक अलग बिंदु पर स्थानांतरित कर दिया। यह एक उपयोगी तकनीक हो सकती है, लेकिन बहुत सारे कैविट्स के साथ आती है - मुख्य रूप से यह कि Dateऑब्जेक्ट फ़ंक्शन का सामान्य आउटपुट नहीं होगा।
मैट जॉनसन-पिंट

30

आप new Date()उदाहरण के लिए, समय क्षेत्र ऑफसेट निर्दिष्ट कर सकते हैं :

new Date('Feb 28 2013 19:00:00 EST')

या

new Date('Feb 28 2013 19:00:00 GMT-0500')

चूंकि Dateयूटीसी समय (यानी getTimeयूटीसी में रिटर्न) स्टोर होता है , इसलिए जावास्क्रिप्ट उन्हें यूटीसी में समय बदल देगा, और जब आप toStringजावास्क्रिप्ट जैसी चीजों को कॉल करेंगे तो यूटीसी समय को ब्राउज़र के स्थानीय समयक्षेत्र में बदल देगा और स्थानीय समय क्षेत्र में स्ट्रिंग लौटाएगा, यदि मैं उपयोग कर रहा हूं UTC+8:

> new Date('Feb 28 2013 19:00:00 GMT-0500').toString()
< "Fri Mar 01 2013 08:00:00 GMT+0800 (CST)"

इसके अलावा आप सामान्य getHours/Minute/Secondविधि का उपयोग कर सकते हैं :

> new Date('Feb 28 2013 19:00:00 GMT-0500').getHours()
< 8

(इसका 8अर्थ है कि समय मेरे स्थानीय समय में परिवर्तित होने के बाद - UTC+8, घंटे की संख्या है 8।)


16
आईएसओ 8601 विस्तारित प्रारूप के अलावा किसी भी प्रारूप को पार्स करना निर्भरता पर निर्भर करता है और इस पर भरोसा नहीं किया जाना चाहिए। टाइमज़ोन संक्षिप्तीकरण के लिए कोई मानक नहीं है, उदाहरण के लिए "ईएसटी" 3 अलग-अलग क्षेत्रों में से किसी एक का प्रतिनिधित्व कर सकता है।
RobG

1
इस टिप्पणी में उदाहरण अक्सर इंटरनेट एक्सप्लोरर में काम नहीं करते हैं। जैसा कि इस पोस्ट में पिछली टिप्पणी में उल्लेख किया गया है, आईएसओ 8601 महत्वपूर्ण है। मैंने ECMA-262 (जावास्क्रिप्ट 5 वीं) संस्करण भाषा विनिर्देश पढ़कर पुष्टि की।
डाकुसन

12

यह आपकी समस्या का समाधान करना चाहिए, कृपया सुधारों की पेशकश करने के लिए स्वतंत्र महसूस करें। यह विधि दी गई तारीख के लिए दिन के समय की बचत का भी हिसाब रखेगी।

dateWithTimeZone = (timeZone, year, month, day, hour, minute, second) => {
  let date = new Date(Date.UTC(year, month, day, hour, minute, second));

  let utcDate = new Date(date.toLocaleString('en-US', { timeZone: "UTC" }));
  let tzDate = new Date(date.toLocaleString('en-US', { timeZone: timeZone }));
  let offset = utcDate.getTime() - tzDate.getTime();

  date.setTime( date.getTime() + offset );

  return date;
};

समयक्षेत्र और स्थानीय समय के साथ कैसे उपयोग करें:

dateWithTimeZone("America/Los_Angeles",2019,8,8,0,0,0)

यह समाधान मेरी जरूरत के लिए फिट था। मुझे यकीन नहीं था कि दिन के उजाले की बचत के लिए मैं वास्तव में क्या कर सकता हूं।
होसेन अमीन

सिर्फ tzDateसीधे क्यों नहीं लौटे ?
लेवी

8

मैंने ऐसा करने के लिए सबसे समर्थित तरीका पाया, बिना किसी तीसरे पक्ष के पुस्तकालय की चिंता किए, getTimezoneOffsetउपयुक्त टाइमस्टैम्प की गणना करके या समय को अपडेट करने के लिए आवश्यक तारीख और समय प्राप्त करने के लिए सामान्य तरीकों का उपयोग करके।

var mydate = new Date();
mydate.setFullYear(2013);
mydate.setMonth(02);
mydate.setDate(28);
mydate.setHours(7);
mydate.setMinutes(00);

// ET timezone offset in hours.
var timezone = -5;
// Timezone offset in minutes + the desired offset in minutes, converted to ms.
// This offset should be the same for ALL date calculations, so you should only need to calculate it once.
var offset = (mydate.getTimezoneOffset() + (timezone * 60)) * 60 * 1000;

// Use the timestamp and offset as necessary to calculate min/sec etc, i.e. for countdowns.
var timestamp = mydate.getTime() + offset,
    seconds = Math.floor(timestamp / 1000) % 60,
    minutes = Math.floor(timestamp / 1000 / 60) % 60,
    hours   = Math.floor(timestamp / 1000 / 60 / 60);

// Or update the timestamp to reflect the timezone offset.
mydate.setTime(mydate.getTime() + offset);
// Then Output dates and times using the normal methods.
var date = mydate.getDate(),
    hour = mydate.getHours();

संपादित करें

मैं पहले UTCतारीख परिवर्तन करते समय विधियों का उपयोग कर रहा था , जो कि गलत था। समय को ऑफसेट जोड़ने के साथ, स्थानीय getकार्यों का उपयोग करके वांछित परिणाम वापस आ जाएंगे।


आपने कहां गणना की timezone_offset?
आनंद सोमानी

1
उफ़, मैंने अपने एक चर को गुमराह किया। timezone_offsetहोना चाहिए था offset, या वीजा वर्सा। मैंने अपना उत्तर सही चर नाम दिखाने के लिए संपादित किया है।
शॉन कॉकरिल

3

मैं यूनिट परीक्षणों के साथ इसी तरह की समस्या में भाग गया (विशेष रूप से तब जब यह इकाई परीक्षण स्नैपशॉट बनाने के लिए स्थानीय रूप से चलता है और फिर CI सर्वर (संभावित रूप से) एक अलग समयक्षेत्र स्नैपशॉट विफल होने की वजह से चलता है)। मैंने हमारे Dateऔर कुछ सहायक तरीकों का मज़ाक उड़ाया :

describe('...', () => {
  let originalDate;

  beforeEach(() => {
    originalDate = Date;
    Date = jest.fn(
      (d) => {
        let newD;
        if (d) {
          newD = (new originalDate(d));
        } else {
          newD = (new originalDate('2017-05-29T10:00:00z'));
        }
        newD.toLocaleString = () => {
          return (new originalDate(newD.valueOf())).toLocaleString("en-US", {timeZone: "America/New_York"});
        };
        newD.toLocaleDateString = () => {
          return (new originalDate(newD.valueOf())).toLocaleDateString("en-US", {timeZone: "America/New_York"});
        };
        newD.toLocaleTimeString = () => {
          return (new originalDate(newD.valueOf())).toLocaleTimeString("en-US", {timeZone: "America/New_York"});
        };
        return newD;
      }
    );
    Date.now = () => { return (Date()); };
  });

  afterEach(() => {
    Date = originalDate;
  });

});

2

Npm से ctoc का उपयोग करने का प्रयास करें। https://www.npmjs.com/package/ctoc_timezone

इसे टाइमज़ोन बदलने के लिए सरल कार्यक्षमता मिली है (अधिकांश टाइमज़ोन 400 के आसपास) और सभी कस्टम प्रारूप इसे प्रदर्शित करना चाहते हैं।


2

ऊपर दिए गए उत्तरों के आधार पर, मैं इस मूल एक लाइनर का उपयोग कर तीन अक्षर स्ट्रिंग में लंबे समय के स्ट्रिंग को परिवर्तित कर रहा हूं:

var longTz = 'America/Los_Angeles';
var shortTz = new Date().
    toLocaleString("en", {timeZoneName: "short", timeZone: longTz}).
    split(' ').
    pop();

यह प्रदान की गई तारीख के आधार पर पीडीटी या पीएसटी देगा। मेरे विशेष उपयोग के मामले में, सेल्सफोर्स (ऑरा / लाइटनिंग) पर विकासशील, हम बैकएंड से उपयोगकर्ता को लंबे समय के प्रारूप में समय-सीमा प्राप्त करने में सक्षम हैं।


सिर्फ इसलिए कि मैं समय-समय पर पेडेंट खेलना पसंद करता हूं, 'अमेरिका / लॉस_अंगेल्स' एक टाइमज़ोन नहीं है, यह एक विशेष ऑफसेट और दिन के उजाले की बचत के नियमों और उन परिवर्तनों के इतिहास के लिए "प्रतिनिधि स्थान है" ( IANA समय डेटाबेस के अनुसार ) । ;-)
रोबॉग

हाहा, आपको यहाँ कई उत्तरों पर उस टिप्पणी को पोस्ट करना होगा: P
शेन

2

मैं इसके 3 साल बहुत देर से जानता हूं, लेकिन शायद यह किसी और की मदद कर सकता है क्योंकि मुझे ऐसा कुछ भी नहीं मिला है, सिवाय क्षण-समय के लाइब्रेरी के अलावा, जो वास्तव में वही नहीं है जो वह यहां मांग रहा है।

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

दिन के समय की बचत के समय पर अलग-अलग टाइमज़ोन में बदलाव होने पर इसे "DDlightSavingTimeInGermany "फ़ंक्शन के साथ थोड़ा काम करने की आवश्यकता हो सकती है।

वैसे भी, इस पृष्ठ को देखें: https://github.com/zerkotin/german-timezone-converter/wiki

मुख्य विधियाँ हैं: ConvertLocalDateTo DeutschTimezone, GemDateToLocalTimezone कन्वर्ट

मैंने इसे प्रलेखित करने का प्रयास किया है, इसलिए यह इतना भ्रामक नहीं होगा।


यह एक टिप्पणी होनी चाहिए, यह कोई जवाब नहीं है।
रॉब

1

कोशिश करें: समय-समय पर , यह मूल रूप से उपलब्ध की मदद से अपेक्षित तिथि को हल करता हैIntl.DateTimeFormat

मैंने अपनी कुछ परियोजनाओं में पहले से ही कुछ वर्षों के लिए उस पद्धति का उपयोग किया था, लेकिन अब मैंने इसे छोटे OS प्रोजेक्ट के रूप में प्रकाशित करने का निर्णय लिया है :)


0

Ionic उपयोगकर्ताओं के लिए, मुझे इसके साथ नरक था क्योंकि .toISOString()html टेम्पलेट के साथ उपयोग किया जाना है।

यह वर्तमान तिथि को हड़प लेगा, लेकिन निश्चित रूप से चयनित तिथि के लिए पिछले उत्तरों में जोड़ा जा सकता है।

मैंने इसका उपयोग करके इसे ठीक कर लिया है:

date = new Date();
public currentDate: any = new Date(this.date.getTime() - this.date.getTimezoneOffset()*60000).toISOString();

* 60000 UTC -6 को इंगित कर रहा है जो कि CST है इसलिए जो भी TimeZone की आवश्यकता है, संख्या और अंतर को बदला जा सकता है।


यह उत्तर नहीं है कि प्रश्नकर्ता की तलाश है। वह विशिष्ट समय क्षेत्र के लिए तिथि प्राप्त करना चाह रहा था।
रिचर्ड वर्गीस

@RichardVergis यह प्रश्न स्पष्ट रूप से बताता है कि उपयोगकर्ता स्थानीय समय में परिवर्तन करना चाहता है, लेकिन यह नहीं बताता है कि वे किस समय क्षेत्र में हैं। मैंने अपने समय क्षेत्र को एक उदाहरण के रूप में कहा था और उपयोगकर्ता मेरे उदाहरण के आधार पर स्पष्ट रूप से पढ़ सकता है, वे इनपुट कर सकते हैं उनके समय क्षेत्र ऑफसेट।
स्टीफन रोमेरो

0

शायद इससे आपको मदद मिलेगी

/**
 * Shift any Date timezone.
 * @param {Date} date - Date to update.
 * @param {string} timezone - Timezone as `-03:00`.
 */
function timezoneShifter(date, timezone) {
  let isBehindGTM = false;
  if (timezone.startsWith("-")) {
    timezone = timezone.substr(1);
    isBehindGTM = true;
  }

  const [hDiff, mDiff] = timezone.split(":").map((t) => parseInt(t));
  const diff = hDiff * 60 + mDiff * (isBehindGTM ? 1 : -1);
  const currentDiff = new Date().getTimezoneOffset();

  return new Date(date.valueOf() + (currentDiff - diff) * 60 * 1000);
}



const _now = new Date()
console.log(
  [
    "Here: " + _now.toLocaleString(),
    "Greenwich: " + timezoneShifter(_now, "00:00").toLocaleString(),
    "New York: " + timezoneShifter(_now, "-04:00").toLocaleString(),
    "Tokyo: " + timezoneShifter(_now, "+09:00").toLocaleString(),
    "Buenos Aires: " + timezoneShifter(_now, "-03:00").toLocaleString(),
  ].join('\n')
);


-2

एक ही मुद्दे का सामना कर रहा था, इस एक का इस्तेमाल किया

Console.log (Date.parse ("Jun 13, 2018 10:50:39 GMT + 1"));

यह मिलीसेकंड पर लौटेगा, जिसमें यू चेक कर सकते हैं +100 टाइमज़ोन को ब्रिटिश समय में मिला सकते हैं आशा है कि यह मदद करता है !!


3
(यह पोस्ट प्रश्न का एक गुणवत्ता उत्तर प्रदान करने के लिए प्रतीत नहीं होता है । कृपया या तो अपना उत्तर संपादित करें, या बस इसे प्रश्न के लिए एक टिप्पणी के रूप में पोस्ट करें)।
s --unıɐ ɐ qɐp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.