मैं जावास्क्रिप्ट में टाइमज़ोन नाम कैसे प्राप्त कर सकता हूं?


116

मुझे पता है कि टाइमज़ोन ऑफसेट कैसे मिलता है, लेकिन मुझे जो कुछ चाहिए वह "अमेरिका / न्यूयॉर्क" का पता लगाने की क्षमता है। क्या यह जावास्क्रिप्ट से भी संभव है या यह है कि कुछ मैं ऑफसेट के आधार पर समझदारी से करने जा रहा हूं?


2
यहाँ एक समारोह है जॉन नाइलैंडर ने लिखा, शायद यह bitbucket.org/pellepim/jstimezonedetect
yunzen

यहाँ एक संबंधित उत्तर है जो मदद कर सकता है: stackoverflow.com/a/19421672/1447034
डगलस

जवाबों:


239

अंतर्राष्ट्रीयकरण एपीआई का समर्थन करता है उपयोगकर्ता समय क्षेत्र में हो रही है, और है समर्थित सभी वर्तमान ब्राउज़रों में।

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

ध्यान रखें कि कुछ पुराने ब्राउज़र संस्करणों पर जो अंतर्राष्ट्रीयकरण एपीआई का समर्थन करते हैं, timeZoneसंपत्ति undefinedउपयोगकर्ता के टाइमज़ोन स्ट्रिंग के बजाय सेट की गई है । जैसा कि सबसे अच्छा मैं बता सकता हूं, लिखने के समय (जुलाई 2017) IE11 को छोड़कर सभी मौजूदा ब्राउज़र एक स्ट्रिंग के रूप में उपयोगकर्ता टाइमज़ोन को वापस कर देंगे।


6
कभी नहीं सोचा था कि यह बहुत सरल है
मोहम्मद शरीफ C

5
भयानक, पहले एक मैंने देखा है जो पल का उपयोग नहीं करता है! धन्यवाद
r0bb077

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

1
बहुत सरल और अच्छा समाधान!
काली जूली

2
@DanielCompton ओह मैं इस तालिका के बारे में नहीं जानता था, इसे फिर से सही करने के लिए धन्यवाद।
कॉमनसेंससकोड

9

अधिकांश उत्कीर्ण उत्तर शायद टाइमजोन प्राप्त करने का सबसे अच्छा तरीका है, हालांकि, Intl.DateTimeFormat().resolvedOptions().timeZoneपरिभाषा के अनुसार आईएएनए टाइमजोन नाम लौटाता है, जो अंग्रेजी में है।

यदि आप वर्तमान उपयोगकर्ता की भाषा में टाइमज़ोन का नाम चाहते हैं, तो आप इसे इस तरह से Dateस्ट्रिंग प्रतिनिधित्व से पार्स कर सकते हैं :

function getTimezoneName() {
  const today = new Date();
  const short = today.toLocaleDateString(undefined);
  const full = today.toLocaleDateString(undefined, { timeZoneName: 'long' });

  // Trying to remove date from the string in a locale-agnostic way
  const shortIndex = full.indexOf(short);
  if (shortIndex >= 0) {
    const trimmed = full.substring(0, shortIndex) + full.substring(shortIndex + short.length);
    
    // by this time `trimmed` should be the timezone's name with some punctuation -
    // trim it from both sides
    return trimmed.replace(/^[\s,.\-:;]+|[\s,.\-:;]+$/g, '');

  } else {
    // in some magic case when short representation of date is not present in the long one, just return the long one as a fallback, since it should contain the timezone's name
    return full;
  }
}

console.log(getTimezoneName());

क्रोम और फ़ायरफ़ॉक्स में परीक्षण किया गया।

बेशक, यह कुछ वातावरण में इरादा के अनुसार काम नहीं करेगा। उदाहरण के लिए, नोड.जेएस GMT+07:00एक नाम के बजाय एक जीएमटी ऑफसेट (जैसे ) देता है । लेकिन मुझे लगता है कि यह एक गिरावट के रूप में अभी भी पठनीय है।

Intl...समाधान के रूप में, PS IE11 में काम नहीं करेगा ।


6

आप इस स्क्रिप्ट का उपयोग कर सकते हैं। http://pellepim.bitbucket.org/jstz/

यहां कांटा या क्लोन भंडार। https://bitbucket.org/pellepim/jstimezonedetect

एक बार जब आप स्क्रिप्ट को शामिल करते हैं, तो आप टाइमज़ोन की सूची को इन- jstz.olson.timezonesवेरिएबल में प्राप्त कर सकते हैं ।

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

var tz = jstz.determine();
tz.name();

Jstz का आनंद लें!


3

नाम से समय-सारणी निकालें (यानी "अमेरिका / न्यूयॉर्क")

moment.tz.guess();

9
कृपया, उल्लेख करें कि यह केवल बिना किसी निर्भरता के भी संभव है:Intl.DateTimeFormat().resolvedOptions().timeZone
user2923322

1
हां, हालांकि क्षण-मंडलियों ने "ब्राउज़रों" के लिए टीबी का अनुमान लगाया है जो उस सुविधा का समर्थन नहीं करते हैं। :)
फेरन मायलिनच

IE11 Intl.DateTimeFormat().resolvedOptions().timeZoneमें वापस देता है undefined, लेकिन moment.tz.guess()सही मूल्य देता है
एंटोनियो

0

आप यहाँ मैपिंग टेबल का उपयोग करके बस अपना कोड लिख सकते हैं: http://www.timeanddate.com/time/zones/

या, क्षण-समय-सारणी पुस्तकालय का उपयोग करें: http://momentjs.com/timezone/docs/

देख zone.name; // America/Los_Angeles

या, यह लाइब्रेरी: https://github.com/Canop/tzdetect.js


4
विशेष रूप से उपयोगी कई timezones एक ही ऑफसेट होने के कारण नहीं है
bmerigan

0

यह GMTपुराने जावास्क्रिप्ट में टाइमज़ोन कोड (जैसे ) मिलता है (मैं पुराने इंजन के साथ Google ऐप स्क्रिप्ट का उपयोग कर रहा हूं):

function getTimezoneName() {
  return new Date().toString().get(/\((.+)\)/);
}

मैं सिर्फ इस मामले में यहाँ डाल रहा हूँ किसी को इसकी जरूरत है।


1
मुझे लगता है कि केवल UTC/ के लिए काम करता है GMT। ऐसा लग रहा है कि दूसरों को याद किया जाता है; जैसे, Pacific Daylight Time
इयान डन

-1

इस कोड को यहाँ से देखें

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js">
</script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js">
</script>
<script type="text/javascript">
  $(document).ready(function(){
    var tz = jstz.determine(); // Determines the time zone of the browser client
    var timezone = tz.name(); //'Asia/Kolhata' for Indian Time.

    alert(timezone);
});
</script>

-5

जावास्क्रिप्ट में, Date.getTimezoneOffset () विधि वर्तमान लोकेल के लिए, UTC से टाइम-ज़ोन ऑफ़सेट को मिनटों में लौटा देती है।

var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;

Moment'timezone एक उपयोगी उपकरण होगा। http://momentjs.com/timezone/

Timezones के बीच तिथियाँ परिवर्तित करें

var newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london     = newYork.clone().tz("Europe/London");

newYork.format();    // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format();     // 2014-06-01T17:00:00+01:00

4
आपको पंक्ति समझ में नहीं आई।
सरसजिद

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