क्लाइंट का टाइमज़ोन ऑफसेट जावास्क्रिप्ट में हो रहा है


613

मैं आगंतुक के समय क्षेत्र की जानकारी कैसे एकत्र कर सकता हूं? मुझे टाइमजोन की आवश्यकता है, साथ ही जीएमटी ऑफसेट घंटों की भी।


3
मैं अब उसी समस्या का अनुमान लगा रहा हूं। यहाँ एक दिलचस्प दृष्टिकोण है।
तामेस पैप

31
शीर्षक टाइमज़ोन के लिए पूछता है, जबकि पाठ जीएमटी ऑफसेट के लिए पूछता है। ये 2 अलग-अलग चीजें हैं। एक Timezone में DST के बारे में जानकारी शामिल है, utc ऑफसेट नहीं करता है। एक टाइमज़ोन का नाम और इतिहास है, ऑफ़सेट नहीं है। "जेएस में क्लाइंट के जीएमटी ऑफसेट को प्राप्त करने" शीर्षक को संपादित करने की सिफारिश करें।
शहरकीद

मुझे टाइमजोन चाहिए। GMT ऑफ़सेट भी मददगार होगा।
डेवलेली

9
यहां जवाब ज्यादातर ऑफसेट पर केंद्रित हैं । के लिए समय क्षेत्र को देखने के लिए इस सवाल का जवाबटाइमजोन टैग विकि में "टाइम ज़ोन! = ऑफ़सेट" देखें ।
मैट जॉनसन-पिंट

7
आप इस Intl.DateTimeFormat ()। SolveOptions () का उपयोग करके सटीक टाइमज़ोन प्राप्त करते हैं। TimeZone
मंगेश

जवाबों:


594

var offset = new Date().getTimezoneOffset();
console.log(offset);

UTC और स्थानीय समय के बीच, समय-क्षेत्र ऑफ़सेट अंतर है, मिनटों में। ध्यान दें कि इसका मतलब है कि ऑफसेट सकारात्मक है अगर स्थानीय टाइमज़ोन UTC के पीछे है और नकारात्मक है अगर यह आगे है। उदाहरण के लिए, यदि आपका समय क्षेत्र UTC + 10 (ऑस्ट्रेलियाई पूर्वी मानक समय) है, तो -600 वापस कर दिया जाएगा। डेलाइट बचत समय इस मान को किसी दिए गए स्थान के लिए भी स्थिर होने से रोकता है

ध्यान दें कि सभी टाइमज़ोन पूरे घंटे से ऑफसेट नहीं होते हैं: उदाहरण के लिए, न्यूफ़ाउंडलैंड यूटीसी माइनस 3h 30 मीटर (समीकरण से बाहर डेलाइट सेविंग टाइम छोड़कर) है।


42
@abernier क्या getTimezoneOffsetप्रभाव में अशुद्धि के बारे में कथन है? जिस लेख का आप उल्लेख कर रहे हैं, वह जून 2007 की तारीख का है और इसमें कोई विवरण नहीं है कि फ़ंक्शन कैसे गलत है। और वास्तव में jsTimezoneDetectआपके द्वारा बताए गए पुस्तकालय का उपयोग करता getTimezoneOffsetहै।
माइक

5
@ सबर्नियर यह ES 1 के बाद से एक मानक है, इसलिए मुझे यकीन है कि किसी भी कार्यान्वयन की समस्या अब तक ठीक हो सकती है, मेरा मतलब है कि यह एक 7 साल पुराना लेख है।
लासागनाएंड्रॉयड

49
var hrs = -(new Date().getTimezoneOffset() / 60) आमतौर पर इस्तेमाल होने वाले घंटों में ऑफसेट प्राप्त करने के लिए
एडविन डेनियल

6
ऐसा लगता है कि यह दिन के उजाले के समय को नहीं मानता है
शाहदत

21
timezone! =utc offset
बेंडाईट्री

480

Timezone की गणना करने के लिए एक ऑफसेट का उपयोग करना एक गलत दृष्टिकोण है, और आप हमेशा समस्याओं का सामना करेंगे। समय क्षेत्र और दिन के उजाले की बचत के नियम एक वर्ष के दौरान कई अवसरों पर बदल सकते हैं, और परिवर्तनों के साथ इसे बनाए रखना मुश्किल है।

जावास्क्रिप्ट में सिस्टम के IANA टाइमज़ोन प्राप्त करने के लिए , आपको उपयोग करना चाहिए

console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)

सितंबर 2019 तक, यह विश्व स्तर पर उपयोग किए जाने वाले 95% ब्राउज़रों में काम करता है

पुरानी संगतता जानकारी

ecma-402 / 1.0 का कहना है कि timeZoneअगर निर्माणकर्ता को उपलब्ध नहीं कराया गया है तो वह अपरिभाषित हो सकता है। हालाँकि, भविष्य के ड्राफ्ट (3.0) ने सिस्टम डिफ़ॉल्ट टाइमज़ोन में बदलकर उस मुद्दे को ठीक कर दिया।

ECMAScript अंतर्राष्ट्रीयकरण एपीआई के इस संस्करण में, timeZoneसंपत्ति अपरिभाषित रहेगी यदि कोई timeZoneसंपत्ति Intl.DateTimeFormat निर्माणकर्ता को प्रदान किए गए विकल्प ऑब्जेक्ट में प्रदान नहीं की गई थी । हालांकि, अनुप्रयोगों को इस पर भरोसा नहीं करना चाहिए, क्योंकि भविष्य के संस्करण मेजबान पर्यावरण के वर्तमान समय क्षेत्र के बजाय एक स्ट्रिंग मान वापस कर सकते हैं।

एक्मा -402 / 3.0 में जो अभी भी एक मसौदे में है वह इसे बदल दिया है

ECMAScript 2015 अंतर्राष्ट्रीयकरण एपीआई के इस संस्करण में, timeZoneसंपत्ति डिफ़ॉल्ट समय क्षेत्र का नाम होगी यदि कोई timeZoneसंपत्ति Intl.DateTimeFormatनिर्माणकर्ता को प्रदान किए गए विकल्प ऑब्जेक्ट में प्रदान नहीं की गई थी । पिछले संस्करण ने timeZoneइस मामले में अपरिभाषित संपत्ति को छोड़ दिया ।


17
यह केवल समय-सीमा प्राप्त करने का एकमात्र उत्तर है, जिसे कुछ उपयोगकर्ताओं को केवल ऑफ़सेट के विपरीत की आवश्यकता हो सकती है। इसलिए, 2016-09 में एक अद्यतन के रूप में, Intl अधिकांश आधुनिक ब्राउज़रों पर काम करता है, लेकिन सफारी पर नहीं। उस ब्राउज़र के लिए, यहाँ एक सटीक सटीक जावास्क्रिप्ट कमबैक
user2085368

6
सत्यापित है कि यह अब सफारी में काम करता है। (संस्करण 10.0 का उपयोग करते हुए)
बैडपिरेट

2
अच्छा होगा यदि यह सभी आधुनिक ब्राउज़रों में काम करता है। हालाँकि IE11 और नवीनतम फ़ायरफ़ॉक्स दोनों टाइमज़ोन प्रॉपर्टी के लिए अपरिभाषित हैं।
हाप्रोग

7
मैंने अभी Chrome 58, एज 40 और फ़ायरफ़ॉक्स 53 के साथ परीक्षण किया है - यह काम करता है। यह IE 11 के साथ काम नहीं करता है, मैंने ओपेरा का परीक्षण नहीं किया।
सुमा

7
इस API द्वारा लौटाए गए समय क्षेत्रों की सूची खोजने में मुझे थोड़ा समय लगा। यहाँ यह है: en.wikipedia.org/wiki/List_of_tz_database_time_zones
जेवियर पाइनास

123

मुझे लगता है कि यह उत्तर थोड़ा सा विषय है, लेकिन मुझे लगता है कि हम में से कई ऐसे उत्तर की तलाश कर रहे हैं जो प्रदर्शन के लिए समय क्षेत्र को प्रारूपित करना चाहते हैं और शायद क्षेत्र का संक्षिप्त नाम भी प्राप्त करें। तो यहाँ यह जाता है ...

यदि आप चाहते हैं कि क्लाइंट टाइमज़ोन अच्छी तरह से स्वरूपित हो तो आप जावास्क्रिप्ट Date.toString पद्धति पर भरोसा कर सकते हैं और करें:

var split = new Date().toString().split(" ");
var timeZoneFormatted = split[split.length - 2] + " " + split[split.length - 1];

यह आपको उदाहरण के लिए "GMT-0400 (EST)" देगा, जब लागू होने के समय के समय सहित।

वैकल्पिक रूप से, रेगेक्स से आप किसी भी वांछित भाग को निकाल सकते हैं:

"GMT-0400 (EDT)" के लिए:

new Date().toString().match(/([A-Z]+[\+-][0-9]+.*)/)[1]

"GMT-0400" के लिए:

new Date().toString().match(/([A-Z]+[\+-][0-9]+)/)[1]

सिर्फ "EDT" के लिए:

new Date().toString().match(/\(([A-Za-z\s].*)\)/)[1]

सिर्फ "-0400" के लिए:

new Date().toString().match(/([-\+][0-9]+)\s/)[1]

Date.toString संदर्भ: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toString


4
क्रोम के साथ टूट गया क्योंकि यह टाइमज़ोन के नाम को जोड़ता है। स्प्लिट का उपयोग न करें। गति लेकिन इसके बजाय एक स्थिर split[4] + " " + split[5]! "
क्रिस्टोफ रूसो

4
यह भी (आश्चर्य, आश्चर्य) IE में काम नहीं करता है। मैंने बस स्प्लिट डेट ऑब्जेक्ट का कंसोल डंप किया। यह क्रोम, फ़ायरफ़ॉक्स और सफारी में समान है, लेकिन IE में अलग है। तो, आप निरंतर अनुक्रमित पर भरोसा नहीं कर सकते। सोम दिसंबर 02 2013 10:22:50 जीएमटी -0500 (ईएसटी): क्रोम, एफएफ, सफारी; सोम दिसम्बर २ १०:२२:५० ईएसटी २०१३:
आईई

1
Gosh धन्यवाद! मैं ब्राउज़र टाइमज़ोन ..... ew दिनांक () .String () (मिलान (/ [AZ] + [\ + +]] [0-9] + *।) /) [] को प्रदर्शित करने की कोशिश कर रहा हुप्स के माध्यम से कूद रहा हूं। 1] वास्तव में मुझे क्या चाहिए था!
कीवीसुगोडेस

1
यह काम नहीं करता है। मेरे लिए splitइसमें शामिल है: ["Mon", "Mar", "13", "2017", "14:05:22", "GMT-0400", "(Eastern", "Daylight", "Time)"]इसलिए परिणाम हैDaylight Time)
DLeh

7
यह वास्तव में एक अच्छा विचार नहीं है जेएस समय का वास्तविक प्रतिनिधित्व करने के बाद आप new Date().toString()पूरी तरह से अपने स्थानीय सेटिंग्स पर निर्भर हैं। अन्य ग्राहकों के आउटपुट की अपेक्षा आपका सदृश होना बहुत बुरा विचार है।
ऑक्टोपस

71

यह पहले से ही बताया गया है कि पूर्णांक के रूप में मिनटों में ऑफसेट कैसे प्राप्त किया जा सकता है, लेकिन अगर कोई चाहता है कि स्थानीय GMT एक स्ट्रिंग के रूप में ऑफसेट करे जैसे "+1130":

function pad(number, length){
    var str = "" + number
    while (str.length < length) {
        str = '0'+str
    }
    return str
}

var offset = new Date().getTimezoneOffset()
offset = ((offset<0? '+':'-')+ // Note the reversed sign!
          pad(parseInt(Math.abs(offset/60)), 2)+
          pad(Math.abs(offset%60), 2))

1
आपको pad(parseInt(Math.abs(offset/60)), 2)इसे ठीक करने के लिए 1 पैडिंग को बदलने की आवश्यकता है ... अन्यथा आप मेरे मामले में +5.530 प्राप्त कर सकते हैं ... मुझे यकीन नहीं है कि गणित का फर्श आदि यहां एक बेहतर चीज होगी या नहीं .... लेकिन यह नहीं कम से कम मुझे उम्मीद के अनुसार +0530 देता है
अभिनव सिंह

वास्तव में मैं क्या खोज रहा हूँ। धन्यवाद !
कोडनूकर

यह सही परिणाम देगा: this.pad (Math.floor ((Math.abs (60 /))), 2)
विवेक

आपके पैड फ़ंक्शन का उपयोग करने के बजाय, मुझे यह करना आसान लगता है: ऑफसेट = (ऑफसेट <0? "+": "-") + ("0000" + parseInt ((Math.abs (ऑफसेट / 60)))) .slice (-4)
flurbius

67

आप उपयोग कर सकते हैं:

पल-समय क्षेत्र

<script src="moment.js"></script>
<script src="moment-timezone-with-data.js"></script>

// retrieve timezone by name (i.e. "America/Chicago")
moment.tz.guess();

ब्राउज़र समय क्षेत्र का पता लगाने के बजाय सही प्राप्त करने के लिए मुश्किल है, क्योंकि ब्राउज़र द्वारा प्रदान की गई थोड़ी जानकारी है।

मोमेंटम टाइमज़ोन का उपयोग करता है Date.getTimezoneOffset()और Date.toString()वर्तमान वर्ष के आसपास के कुछ क्षणों में ब्राउज़र वातावरण के बारे में अधिक से अधिक जानकारी इकट्ठा करने के लिए। फिर यह उस जानकारी की तुलना करता है जिसमें सभी समय क्षेत्र डेटा लोड किया गया है और निकटतम मैच लौटाता है। संबंधों के मामले में, सबसे बड़ी आबादी वाले शहर के साथ समय क्षेत्र वापस आ गया है।

console.log(moment.tz.guess()); // America/Chicago

12
यह स्वीकृत उत्तर होना चाहिए। यह एकमात्र ऐसा है जो ऑफसेट के बजाय वास्तविक टाइमज़ोन नाम देता है । याद रखें कि टाइमज़ोन ऑफसेट नाम से लिया जा सकता है, विपरीत सच नहीं है। डीएसटी और अन्य सूक्ष्मताओं के कारण, कई टाइमज़ोन केवल वर्ष के कुछ विशिष्ट दिनों में समान ऑफसेट हो सकते हैं।
रोमेन जी

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

43

मैंने अपनी परियोजना में एक समारोह लिखा, जो hh:mmप्रारूप में समयक्षेत्र लौटाता है । मुझे आशा है कि यह किसी की मदद कर सकता है:

function getTimeZone() {
    var offset = new Date().getTimezoneOffset(), o = Math.abs(offset);
    return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2);
}

// Outputs: +5:00

वर्किंग फिडल


1
धन्यवाद! यह वही है जो मुझे चाहिए था!
जेरेमी मोरिट्ज़

15

एक लाइनर जो ऑफसेट और टाइम ज़ोन दोनों देता है, बस एक नई डेट ऑब्जेक्ट पर टाइमस्ट्रीमिंग () कॉल करना है । MDN से:

toTimeString()विधि समय अमेरिकी अंग्रेजी में मानव पठनीय रूप में एक तिथि वस्तु के भाग देता है।

पकड़ यह है कि समयक्षेत्र मानक IANA प्रारूप में नहीं है; यह "महाद्वीप / शहर" IANA प्रारूप की तुलना में कुछ हद तक अधिक उपयोगकर्ता के अनुकूल है । कोशिश करके देखो:

console.log(new Date().toTimeString().slice(9));
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone);
console.log(new Date().getTimezoneOffset() / -60);

कैलिफोर्निया में अभी, toTimeString()रिटर्न Pacific Daylight Time, जबकि Intl एपीआई रिटर्न America/Los_Angeles। कोलंबिया में, आप Colombia Standard Time, बनाम America/Bogota

ध्यान दें कि इस प्रश्न के कई अन्य उत्तर Date.toString () पर कॉल करके समान जानकारी प्राप्त करने का प्रयास करते हैं। वह दृष्टिकोण विश्वसनीय नहीं है, जैसा कि एमडीएन बताते हैं :

दिनांक उदाहरण समय में एक विशिष्ट बिंदु को संदर्भित करते हैं। कॉलिंग इनस्ट्रिंग () अमेरिकी अंग्रेजी में एक मानव पठनीय रूप में प्रारूपित तारीख को वापस कर देगा। [...] कभी-कभी समय भाग की एक स्ट्रिंग प्राप्त करना वांछनीय है; इस तरह के काम को toTimeString()विधि के साथ पूरा किया जा सकता है ।

toTimeString()क्योंकि शिकायत ECMA-262 को लागू करने इंजन स्ट्रिंग से प्राप्त से अलग हो सकती विधि विशेष रूप से उपयोगी है toString()के लिए Date, वस्तुओं के रूप में प्रारूप कार्यान्वयन पर निर्भर है, सरल स्ट्रिंग स्लाइसिंग दृष्टिकोण कई इंजनों में लगातार परिणाम नहीं दे सकते हैं।


13

वस्तु getTimezoneOffset()की कोशिश Date:

var curdate = new Date()
var offset = curdate.getTimezoneOffset()

यह विधि मिनटों में समय क्षेत्र ऑफ़सेट लौटाती है जो GMT और स्थानीय समय के बीच का अंतर मिनटों में है।


9

जावास्क्रिप्ट:

var d = new Date();
var n = d.getTimezoneOffset();
var timezone = n / -60;
console.log(timezone);


3
यह उत्तर क्या प्रदान करता है कि पिछले उत्तर नहीं मिले हैं?
दान डस्केलस्क्यू

7

पल.जे के साथ :

moment().format('zz');

6
zऔर zz1.6.0 के रूप में पदावनत किया गया है क्षण
.com/

3
यह @MrUpsidown अब है ZऔरZZ
brauliobo

4
@brauliobo ये पैरामीटर एक ही चीज़ को वापस नहीं करते हैं। z और zz ने समयक्षेत्र लौटाया, उदा CST, लेकिन Z और ZZ ने ऑफ़सेट लौटाया, जैसे -0600।
लुका स्पिलर

नवीनतम डॉक्स शो .zoneAbbr()को बदल दिया गया है zऔर zzयहाँ
tabish89

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

6

साथ में , आप के रूप में वर्तमान timezone पा सकते हैं

console.log(moment().utcOffset()); // (-240, -120, -60, 0, 60, 120, 240, etc.)
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>


साथ में , आप के रूप में वर्तमान timezone पा सकते हैं

console.log(dayjs().utcOffset()); // (-240, -120, -60, 0, 60, 120, 240, etc.)
<script src="https://unpkg.com/dayjs@1.8.10/dayjs.min.js"></script>

दोनों API मिनटों में utc ऑफसेट करते हैं।


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

1
"दिन के साथ, आप वर्तमान टाइमज़ोन पा सकते हैं" बिल्कुल सटीक नहीं है - आप केवल ऑफ़सेट पाएंगे, टाइमज़ोन नहीं । इसके अलावा, Dayjs में टाइमज़ोन समर्थन नहीं है । इसकी .utcOffset () विधि देशी पर एक साधारण आवरण है getTimezoneOffset()
दान डस्केल्सस्कु

4

घंटों में समय

var offset = new Date().getTimezoneOffset();
if(offset<0)
    console.log( "Your timezone is- GMT+" + (offset/-60));
else
    console.log( "Your timezone is- GMT-" + offset/60);

यदि आप टिप्पणी में उल्लिखित सटीक होना चाहते हैं, तो आपको इस तरह की कोशिश करनी चाहिए-

var offset = new Date().getTimezoneOffset();

if(offset<0)
{
    var extraZero = "";
    if(-offset%60<10)
      extraZero="0";

    console.log( "Your timezone is- GMT+" + Math.ceil(offset/-60)+":"+extraZero+(-offset%60));
}
else
{
    var extraZero = "";
    if(offset%60<10)
      extraZero="0";

    console.log( "Your timezone is- GMT-" + Math.floor(offset/60)+":"+extraZero+(offset%60));
}


वेनेजुएला की तरह, जब यह एक पूर्ण घंटे नहीं है, तो टाइमज़ोन के लिए काम नहीं करता है, जहां यह GMT-4.5
Mirko

हाँ यह सही है। 0.5 का मतलब 0.5 * 30 मि। मुझे लगता है कि आपको यह मिल गया है क्यों यह 0.5 दे रहा है?
अबरार जहीन

हां, इसलिए GMT-4.5 एक मान्य समयक्षेत्र नहीं है, GMT-4: 30
Mirko

@ मिर्को अब जवाब का दूसरा हिस्सा आपके लिए है
अबरार जेहिन

यदि आप अधिक सटीक होना चाहते हैं, तो GMT के बजाय UTC का उपयोग करें, [हिल्टन और मैकार्थी 2013, पी। 231-2। ], विकिपीडिया GMT पर भी देखें - ( en.wikipedia.org/wiki/Greenwich_Mean_Time )
टॉम कुस्केल

3

यदि आप सभी की जरूरत है "एमएसटी" या "ईएसटी" समय क्षेत्र संक्षिप्त नाम है:

function getTimeZone(){
    var now = new Date().toString();
    var timeZone = now.replace(/.*[(](.*)[)].*/,'$1');//extracts the content between parenthesis
    return timeZone;
}

उपयोग करना Date.toString()विश्वसनीय नहीं है, और एमडीएन बताते हैं कि क्यों। मैंने अपने उत्तर में उनके दस्तावेज़ से संबंधित अनुभाग चिपका दिया है
दान डस्केलस्क्यू

3

देखें कि यह परिणामी ऑपरेटर Timezone के विपरीत था। कुछ गणित फ़ंक्शन लागू करें और फिर संख्या को कम या अधिक मान्य करें।

यहाँ छवि विवरण दर्ज करें

MDN दस्तावेज़ देखें

var a = new Date().getTimezoneOffset();

var res = -Math.round(a/60)+':'+-(a%60);
res = res < 0 ?res : '+'+res;

console.log(res)


1
नकारात्मक मूल्य का दोष, कुछ मुद्दा
अरुण प्रसाद ES

1
क्यों round? यह होना चाहिए floor, है ना?
Qwertiy

3
function getLocalTimeZone() {
    var dd = new Date();
    var ddStr = dd.toString();
    var ddArr = ddStr.split(' ');
    var tmznSTr = ddArr[5];
    tmznSTr = tmznSTr.substring(3, tmznSTr.length);
    return tmznSTr;
}

उदाहरण: थु जून 21 2018 18:12:50 GMT + 0530 (भारत मानक समय)

ओ / पी: +0530


उपयोग करना Date.toString()विश्वसनीय नहीं है, और एमडीएन बताते हैं कि क्यों। मैंने अपने उत्तर में उनके दस्तावेज़ से संबंधित अनुभाग चिपका दिया है
दान डस्केलस्क्यू


2

यह मान उपयोगकर्ता की मशीन से है और इसे कभी भी बदला जा सकता है, इसलिए मुझे लगता है कि इससे कोई फर्क नहीं पड़ता, मैं बस एक अनुमानित मूल्य प्राप्त करना चाहता हूं और फिर इसे अपने सर्वर में GMT में परिवर्तित कर सकता हूं।

उदाहरण के लिए, मैं ताइवान से हूं और यह मेरे लिए "+8" लौटाता है।

काम करने का उदाहरण

जे एस

function timezone() {
    var offset = new Date().getTimezoneOffset();
    var minutes = Math.abs(offset);
    var hours = Math.floor(minutes / 60);
    var prefix = offset < 0 ? "+" : "-";
    return prefix+hours;
}


$('#result').html(timezone());

एचटीएमएल

<div id="result"></div>

परिणाम

+8

2

पर new Date() आप ऑफसेट प्राप्त कर सकते हैं, जो आप कर सकते हैं समय-नाम प्राप्त करने के लिए:

new Date().toString().replace(/(.*\((.*)\).*)/, '$2');

आपको ()तारीख के अंत में मूल्य मिलता है , जो कि समयक्षेत्र का नाम है।


उपयोग करना Date.toString()विश्वसनीय नहीं है, और एमडीएन बताते हैं कि क्यों। मैंने अपने उत्तर में उनके दस्तावेज़ से संबंधित अनुभाग चिपका दिया है । साथ ही, यह उत्तर कम से कम 3 बार पहले ही दिया जा चुका है।
डेन डैस्कलेस्क्यू

2

यह मेरा समाधान होगा:


    // For time zone:
    const timeZone = /\((.*)\)/.exec(new Date().toString())[1];
    
    // Offset hours:
    const offsetHours = new Date().getTimezoneOffset() / 60;
    
    console.log(`${timeZone}, ${offsetHours}hrs`);

1

करने के लिए एक विकल्प के रूप new Date().getTimezoneOffset()औरmoment().format('zz') , आप भी उपयोग कर सकते हैं:

var offset = moment.parseZone(Date.now()).utcOffset() / 60
console.log(offset);
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>

jstimezone भी काफी छोटी और अचूक है ( https://bitbucket.org/pellepim/jstimezonedetect/issues?status=new&status=open )


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

1

ऑफ़सेट को पोस्टिव में बदलने के लिए इसका उपयोग करें:

var offset = new Date().getTimezoneOffset();
console.log(offset);
this.timeOffSet = offset + (-2*offset);
console.log(this.timeOffSet);

-2

मैं सिर्फ 3 लेटर स्ट्रिंग (जैसे "पीडीटी") की तलाश में था और मार्क्वेज़ के जवाब की कोशिश की, लेकिन क्रॉस ब्राउज़र समर्थन के लिए इसे थोड़ा मोड़ना पड़ा। सौभाग्य से, स्ट्रिंग अंतिम संभावित मैच है :)

यहाँ मैंने क्या किया, कॉफीस्क्रिप्ट में:

browserTimezone = ->
  userDate = new Date()
  zoneMatches = userDate.toString().match(/([A-Z][A-Z][A-Z])/g)
  userZone = zoneMatches[zoneMatches.length - 1]

IE8, IE9, Safari 9, Firefox 44 और Chrome 48 में काम करता है


2
हालांकि, 4 अक्षरों के साथ
टाइमज़ोन हैं

उपयोग करना Date.toString()विश्वसनीय नहीं है, और एमडीएन बताते हैं कि क्यों। मैंने अपने उत्तर में उनके दस्तावेज़ से संबंधित अनुभाग चिपका दिया है
डेन डैस्कलेस्क्यू

-3

आपको बस क्षण. js और jstz.js को शामिल करना है

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.6/jstz.min.js"></script>

और उसके बाद

<script>
$(function(){
 var currentTimezone = jstz.determine();
 var timezone = currentTimezone.name();
 alert(timezone);
});

</script>

-3

यह मेरे लिए बहुत अच्छा काम है:

// Translation to offset in Unix Timestamp
let timeZoneOffset = ((new Date().getTimezoneOffset())/60)*3600;

1
कोई स्पष्टीकरण?

-4

आप बस यह कोशिश कर सकते हैं। यह आपको वर्तमान मशीन समय लौटाएगा

var _d = new Date(), t = 0, d = new Date(t*1000 + _d.getTime())


इस तरह से मुझे new Date(new Date().getTime()); यह सोचना चाहिए: यह प्रदर्शित करेगा: "शुक्र दिसंबर 28 2018 10:15:23 GMT + 0100 (केंद्रीय यूरोपीय मानक समय) {}"
darmis

-4

यह काम करेगा।


var time = new Date(),
timestamp = Date(1000 + time.getTime());
console.log(timestamp);

Thu May 25 2017 21:35:14 GMT+0300 (IDT)

अपरिभाषित

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