मैं आगंतुक के समय क्षेत्र की जानकारी कैसे एकत्र कर सकता हूं? मुझे टाइमजोन की आवश्यकता है, साथ ही जीएमटी ऑफसेट घंटों की भी।
मैं आगंतुक के समय क्षेत्र की जानकारी कैसे एकत्र कर सकता हूं? मुझे टाइमजोन की आवश्यकता है, साथ ही जीएमटी ऑफसेट घंटों की भी।
जवाबों:
var offset = new Date().getTimezoneOffset();
console.log(offset);
UTC और स्थानीय समय के बीच, समय-क्षेत्र ऑफ़सेट अंतर है, मिनटों में। ध्यान दें कि इसका मतलब है कि ऑफसेट सकारात्मक है अगर स्थानीय टाइमज़ोन UTC के पीछे है और नकारात्मक है अगर यह आगे है। उदाहरण के लिए, यदि आपका समय क्षेत्र UTC + 10 (ऑस्ट्रेलियाई पूर्वी मानक समय) है, तो -600 वापस कर दिया जाएगा। डेलाइट बचत समय इस मान को किसी दिए गए स्थान के लिए भी स्थिर होने से रोकता है
ध्यान दें कि सभी टाइमज़ोन पूरे घंटे से ऑफसेट नहीं होते हैं: उदाहरण के लिए, न्यूफ़ाउंडलैंड यूटीसी माइनस 3h 30 मीटर (समीकरण से बाहर डेलाइट सेविंग टाइम छोड़कर) है।
getTimezoneOffset
प्रभाव में अशुद्धि के बारे में कथन है? जिस लेख का आप उल्लेख कर रहे हैं, वह जून 2007 की तारीख का है और इसमें कोई विवरण नहीं है कि फ़ंक्शन कैसे गलत है। और वास्तव में jsTimezoneDetect
आपके द्वारा बताए गए पुस्तकालय का उपयोग करता getTimezoneOffset
है।
var hrs = -(new Date().getTimezoneOffset() / 60)
आमतौर पर इस्तेमाल होने वाले घंटों में ऑफसेट प्राप्त करने के लिए
timezone
! =utc offset
Timezone की गणना करने के लिए एक ऑफसेट का उपयोग करना एक गलत दृष्टिकोण है, और आप हमेशा समस्याओं का सामना करेंगे। समय क्षेत्र और दिन के उजाले की बचत के नियम एक वर्ष के दौरान कई अवसरों पर बदल सकते हैं, और परिवर्तनों के साथ इसे बनाए रखना मुश्किल है।
जावास्क्रिप्ट में सिस्टम के IANA टाइमज़ोन प्राप्त करने के लिए , आपको उपयोग करना चाहिए
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
ecma-402 / 1.0 का कहना है कि timeZone
अगर निर्माणकर्ता को उपलब्ध नहीं कराया गया है तो वह अपरिभाषित हो सकता है। हालाँकि, भविष्य के ड्राफ्ट (3.0) ने सिस्टम डिफ़ॉल्ट टाइमज़ोन में बदलकर उस मुद्दे को ठीक कर दिया।
ECMAScript अंतर्राष्ट्रीयकरण एपीआई के इस संस्करण में,
timeZone
संपत्ति अपरिभाषित रहेगी यदि कोईtimeZone
संपत्तिIntl.DateTimeFormat
निर्माणकर्ता को प्रदान किए गए विकल्प ऑब्जेक्ट में प्रदान नहीं की गई थी । हालांकि, अनुप्रयोगों को इस पर भरोसा नहीं करना चाहिए, क्योंकि भविष्य के संस्करण मेजबान पर्यावरण के वर्तमान समय क्षेत्र के बजाय एक स्ट्रिंग मान वापस कर सकते हैं।
एक्मा -402 / 3.0 में जो अभी भी एक मसौदे में है वह इसे बदल दिया है
ECMAScript 2015 अंतर्राष्ट्रीयकरण एपीआई के इस संस्करण में,
timeZone
संपत्ति डिफ़ॉल्ट समय क्षेत्र का नाम होगी यदि कोईtimeZone
संपत्तिIntl.DateTimeFormat
निर्माणकर्ता को प्रदान किए गए विकल्प ऑब्जेक्ट में प्रदान नहीं की गई थी । पिछले संस्करण नेtimeZone
इस मामले में अपरिभाषित संपत्ति को छोड़ दिया ।
मुझे लगता है कि यह उत्तर थोड़ा सा विषय है, लेकिन मुझे लगता है कि हम में से कई ऐसे उत्तर की तलाश कर रहे हैं जो प्रदर्शन के लिए समय क्षेत्र को प्रारूपित करना चाहते हैं और शायद क्षेत्र का संक्षिप्त नाम भी प्राप्त करें। तो यहाँ यह जाता है ...
यदि आप चाहते हैं कि क्लाइंट टाइमज़ोन अच्छी तरह से स्वरूपित हो तो आप जावास्क्रिप्ट 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
split[4] + " " + split[5]
! "
split
इसमें शामिल है: ["Mon", "Mar", "13", "2017", "14:05:22", "GMT-0400", "(Eastern", "Daylight", "Time)"]
इसलिए परिणाम हैDaylight Time)
new Date().toString()
पूरी तरह से अपने स्थानीय सेटिंग्स पर निर्भर हैं। अन्य ग्राहकों के आउटपुट की अपेक्षा आपका सदृश होना बहुत बुरा विचार है।
यह पहले से ही बताया गया है कि पूर्णांक के रूप में मिनटों में ऑफसेट कैसे प्राप्त किया जा सकता है, लेकिन अगर कोई चाहता है कि स्थानीय 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))
pad(parseInt(Math.abs(offset/60)), 2)
इसे ठीक करने के लिए 1 पैडिंग को बदलने की आवश्यकता है ... अन्यथा आप मेरे मामले में +5.530 प्राप्त कर सकते हैं ... मुझे यकीन नहीं है कि गणित का फर्श आदि यहां एक बेहतर चीज होगी या नहीं .... लेकिन यह नहीं कम से कम मुझे उम्मीद के अनुसार +0530 देता है
आप उपयोग कर सकते हैं:
<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
मैंने अपनी परियोजना में एक समारोह लिखा, जो 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
एक लाइनर जो ऑफसेट और टाइम ज़ोन दोनों देता है, बस एक नई डेट ऑब्जेक्ट पर टाइमस्ट्रीमिंग () कॉल करना है । 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
, वस्तुओं के रूप में प्रारूप कार्यान्वयन पर निर्भर है, सरल स्ट्रिंग स्लाइसिंग दृष्टिकोण कई इंजनों में लगातार परिणाम नहीं दे सकते हैं।
जावास्क्रिप्ट:
var d = new Date();
var n = d.getTimezoneOffset();
var timezone = n / -60;
console.log(timezone);
पल.जे के साथ :
moment().format('zz');
Z
औरZZ
साथ में momentjs, आप के रूप में वर्तमान 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>
साथ में dayjs, आप के रूप में वर्तमान 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 ऑफसेट करते हैं।
getTimezoneOffset()
।
घंटों में समय
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));
}
यदि आप सभी की जरूरत है "एमएसटी" या "ईएसटी" समय क्षेत्र संक्षिप्त नाम है:
function getTimeZone(){
var now = new Date().toString();
var timeZone = now.replace(/.*[(](.*)[)].*/,'$1');//extracts the content between parenthesis
return timeZone;
}
Date.toString()
विश्वसनीय नहीं है, और एमडीएन बताते हैं कि क्यों। मैंने अपने उत्तर में उनके दस्तावेज़ से संबंधित अनुभाग चिपका दिया है ।
देखें कि यह परिणामी ऑपरेटर Timezone के विपरीत था। कुछ गणित फ़ंक्शन लागू करें और फिर संख्या को कम या अधिक मान्य करें।
var a = new Date().getTimezoneOffset();
var res = -Math.round(a/60)+':'+-(a%60);
res = res < 0 ?res : '+'+res;
console.log(res)
round
? यह होना चाहिए floor
, है ना?
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()
विश्वसनीय नहीं है, और एमडीएन बताते हैं कि क्यों। मैंने अपने उत्तर में उनके दस्तावेज़ से संबंधित अनुभाग चिपका दिया है ।
इसे इस्तेमाल करे,
new Date().toString().split("GMT")[1].split(" (")[0]
यह मान उपयोगकर्ता की मशीन से है और इसे कभी भी बदला जा सकता है, इसलिए मुझे लगता है कि इससे कोई फर्क नहीं पड़ता, मैं बस एक अनुमानित मूल्य प्राप्त करना चाहता हूं और फिर इसे अपने सर्वर में 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
पर new Date(
) आप ऑफसेट प्राप्त कर सकते हैं, जो आप कर सकते हैं समय-नाम प्राप्त करने के लिए:
new Date().toString().replace(/(.*\((.*)\).*)/, '$2');
आपको ()
तारीख के अंत में मूल्य मिलता है , जो कि समयक्षेत्र का नाम है।
Date.toString()
विश्वसनीय नहीं है, और एमडीएन बताते हैं कि क्यों। मैंने अपने उत्तर में उनके दस्तावेज़ से संबंधित अनुभाग चिपका दिया है । साथ ही, यह उत्तर कम से कम 3 बार पहले ही दिया जा चुका है।
यह मेरा समाधान होगा:
// For time zone:
const timeZone = /\((.*)\)/.exec(new Date().toString())[1];
// Offset hours:
const offsetHours = new Date().getTimezoneOffset() / 60;
console.log(`${timeZone}, ${offsetHours}hrs`);
करने के लिए एक विकल्प के रूप new Date().getTimezoneOffset()
औरmoment().format('zz')
, आप भी उपयोग कर सकते हैंmomentjs:
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 )
ऑफ़सेट को पोस्टिव में बदलने के लिए इसका उपयोग करें:
var offset = new Date().getTimezoneOffset();
console.log(offset);
this.timeOffSet = offset + (-2*offset);
console.log(this.timeOffSet);
मैं सिर्फ 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 में काम करता है
Date.toString()
विश्वसनीय नहीं है, और एमडीएन बताते हैं कि क्यों। मैंने अपने उत्तर में उनके दस्तावेज़ से संबंधित अनुभाग चिपका दिया है ।
आपको बस क्षण. 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>
आप बस यह कोशिश कर सकते हैं। यह आपको वर्तमान मशीन समय लौटाएगा
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 (केंद्रीय यूरोपीय मानक समय) {}"