मुझे पता है कि टाइमज़ोन ऑफसेट कैसे मिलता है, लेकिन मुझे जो कुछ चाहिए वह "अमेरिका / न्यूयॉर्क" का पता लगाने की क्षमता है। क्या यह जावास्क्रिप्ट से भी संभव है या यह है कि कुछ मैं ऑफसेट के आधार पर समझदारी से करने जा रहा हूं?
मुझे पता है कि टाइमज़ोन ऑफसेट कैसे मिलता है, लेकिन मुझे जो कुछ चाहिए वह "अमेरिका / न्यूयॉर्क" का पता लगाने की क्षमता है। क्या यह जावास्क्रिप्ट से भी संभव है या यह है कि कुछ मैं ऑफसेट के आधार पर समझदारी से करने जा रहा हूं?
जवाबों:
अंतर्राष्ट्रीयकरण एपीआई का समर्थन करता है उपयोगकर्ता समय क्षेत्र में हो रही है, और है समर्थित सभी वर्तमान ब्राउज़रों में।
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
ध्यान रखें कि कुछ पुराने ब्राउज़र संस्करणों पर जो अंतर्राष्ट्रीयकरण एपीआई का समर्थन करते हैं, timeZoneसंपत्ति undefinedउपयोगकर्ता के टाइमज़ोन स्ट्रिंग के बजाय सेट की गई है । जैसा कि सबसे अच्छा मैं बता सकता हूं, लिखने के समय (जुलाई 2017) IE11 को छोड़कर सभी मौजूदा ब्राउज़र एक स्ट्रिंग के रूप में उपयोगकर्ता टाइमज़ोन को वापस कर देंगे।
अधिकांश उत्कीर्ण उत्तर शायद टाइमजोन प्राप्त करने का सबसे अच्छा तरीका है, हालांकि, 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 में काम नहीं करेगा ।
आप इस स्क्रिप्ट का उपयोग कर सकते हैं। http://pellepim.bitbucket.org/jstz/
यहां कांटा या क्लोन भंडार। https://bitbucket.org/pellepim/jstimezonedetect
एक बार जब आप स्क्रिप्ट को शामिल करते हैं, तो आप टाइमज़ोन की सूची को इन- jstz.olson.timezonesवेरिएबल में प्राप्त कर सकते हैं ।
और क्लाइंट ब्राउज़र का टाइमज़ोन निर्धारित करने के लिए निम्न कोड का उपयोग किया जाता है।
var tz = jstz.determine();
tz.name();
Jstz का आनंद लें!
नाम से समय-सारणी निकालें (यानी "अमेरिका / न्यूयॉर्क")
moment.tz.guess();
Intl.DateTimeFormat().resolvedOptions().timeZone
Intl.DateTimeFormat().resolvedOptions().timeZoneमें वापस देता है undefined, लेकिन moment.tz.guess()सही मूल्य देता है
आप यहाँ मैपिंग टेबल का उपयोग करके बस अपना कोड लिख सकते हैं: http://www.timeanddate.com/time/zones/
या, क्षण-समय-सारणी पुस्तकालय का उपयोग करें: http://momentjs.com/timezone/docs/
देख zone.name; // America/Los_Angeles
या, यह लाइब्रेरी: https://github.com/Canop/tzdetect.js
यह GMTपुराने जावास्क्रिप्ट में टाइमज़ोन कोड (जैसे ) मिलता है (मैं पुराने इंजन के साथ Google ऐप स्क्रिप्ट का उपयोग कर रहा हूं):
function getTimezoneName() {
return new Date().toString().get(/\((.+)\)/);
}
मैं सिर्फ इस मामले में यहाँ डाल रहा हूँ किसी को इसकी जरूरत है।
UTC/ के लिए काम करता है GMT। ऐसा लग रहा है कि दूसरों को याद किया जाता है; जैसे, Pacific Daylight Time।
इस कोड को यहाँ से देखें
<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>
जावास्क्रिप्ट में, 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