दिलचस्प पोस्ट
AngularJS एनजी-क्लिक रोकप्रोग्रामेशन ऑब्जेक्टआईडी के सरणी में $ देखने .NET के लिए कोई सभ्य पाठ diff / मर्ज इंजन? एक मौजूदा पीडीएफ में लिंक निकालने और अद्यतन करने के लिए आईटेकशशार का इस्तेमाल करना कार्यों के बजाय गुणों का उपयोग कब करना UIScrollView contentSize काम नहीं कर रहा है Jquery / Javascript का उपयोग करके, मेरे वेब पेज में से किसी एक से सभी छवियों को कैसे लोड करें I सीएसएस का उपयोग कर सही से एक पृष्ठभूमि की छवि ऑफसेट Stdin से पासवर्ड पढ़ें कैसे RecyclerView स्क्रॉल स्थिति को बचाने के लिए RecyclerView.State का उपयोग? कैसे बाइट सरणी से बिटमैप बनाने के लिए? एक लूप के लिए क्लोज़र्स मौजूदा तालिका में SQL सर्वर का चयन करें Google एंड्रॉइड यूएसबी चालक और एडीबी किसी डेटा को पुन: आकार देने के लिए उचित / तेज़ तरीका

कैसे जांच करें कि डीएसटी (डेलाइट सेविंग टाइम) प्रभाव में है और यदि ऑफसेट है तो क्या है?

यह मेरे जेएस कोड का थोड़ा सा है जिसके लिए यह आवश्यक है:

var secDiff=Math.abs(Math.round((utc_date-this.premiere_date)/1000)); this.years=this.calculateUnit(secDiff,(86400*365)); this.days=this.calculateUnit(secDiff-(this.years*(86400*365)),86400); this.hours=this.calculateUnit((secDiff-(this.years*(86400*365))-(this.days*86400)),3600); this.minutes=this.calculateUnit((secDiff-(this.years*(86400*365))-(this.days*86400)-(this.hours*3600)),60); this.seconds=this.calculateUnit((secDiff-(this.years*(86400*365))-(this.days*86400)-(this.hours*3600)-(this.minutes*60)),1); 

मुझे पहले दिनांक समय प्राप्त करना है, लेकिन यदि डीएसटी उपयोग में है तो तिथियां 1 घंटे से बंद होती हैं। मुझे नहीं पता कि कैसे डीएसटी उपयोग में है या नहीं।

डेलाइट सेब की शुरुआत और समाप्त होने पर मुझे कैसे पता लगा सकता है?

वेब के समाधान से एकत्रित समाधान "कैसे जांच करें कि डीएसटी (डेलाइट सेविंग टाइम) प्रभाव में है और यदि ऑफसेट है तो क्या है?"

पुरानी लिंक द्वारा दी गई कोड आपको बताएगा कि क्या डेलाइट सेविंग टाइम प्रभाव में है या नहीं। यह इस तथ्य का उपयोग करता है कि getTimezoneOffset डीएसटी और मानक समय के दौरान एक अलग मान देता है, और दोनों के बीच अंतर की तुलना करता है। (उदाहरण के लिए डीएसटी के दौरान न्यू यॉर्क का रिटर्न सामान्य रूप से -5 और -4 होता है)

ध्यान दें कि मुझे अंतरराष्ट्रीय समय क्षेत्रों की जटिलताओं के बारे में कोई जानकारी नहीं है, और केवल यह परीक्षण किया है कि यह मेरे समय क्षेत्र के लिए सही परिणाम देता है .. लेकिन कोड ठोस लगता है

 var today = new Date(); if (today.dst()) { alert ("Daylight savings time!"); } Date.prototype.stdTimezoneOffset = function() { var jan = new Date(this.getFullYear(), 0, 1); var jul = new Date(this.getFullYear(), 6, 1); return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset()); } Date.prototype.dst = function() { return this.getTimezoneOffset() < this.stdTimezoneOffset(); } 

दो तिथियां बनाएं: एक जून में, एक जनवरी में। उनके getTimezoneOffset () मूल्यों की तुलना करें

  • अगर ऑफसेट ऑफिस> जून ऑफ़सेट, क्लाइंट उत्तरी गोलार्ध में है
  • अगर जनवरी ऑफसेट <जून ऑफसेट, ग्राहक दक्षिणी गोलार्ध में है
  • यदि कोई अंतर नहीं है, क्लाइंट का समयक्षेत्र डीएसटी का निरीक्षण नहीं करता है

अब वर्तमान तिथि के getTimezoneOffset () जांचें।

  • यदि जून के बराबर उत्तरी गोलार्द्ध होता है, तो वर्तमान समयक्षेत्र डीएसटी (+1 घंटा) होता है
  • यदि जनवरी के बराबर, दक्षिणी गोलार्ध, तब वर्तमान समयक्षेत्र डीएसटी (+1 घंटा) है

मुझे आज भी इसी समस्या का सामना करना पड़ा, लेकिन जब से हमारा डेलाइट बचत शुरू होता है और संयुक्त राज्य अमेरिका (अलग-अलग मेरी समझ से) से अलग समय पर बंद हो जाता है, मैंने थोड़ा अलग मार्ग का इस्तेमाल किया ..

 var arr = []; for (var i = 0; i < 365; i++) { var d = new Date(); d.setDate(i); newoffset = d.getTimezoneOffset(); arr.push(newoffset); } DST = Math.min.apply(null, arr); nonDST = Math.max.apply(null, arr); 

उसके बाद आप केवल डीएसटी और नॉनडीएसटी के साथ वर्तमान समयक्षेत्र ऑफसेट की तुलना कर सकते हैं जो कि एक मैचों को देखने के लिए

शेल्डन ग्रिफिन द्वारा दिए गए समाधान पर मैट जोहानसन की टिप्पणी के आधार पर मैंने निम्न कोड बनाया:

  Date.prototype.stdTimezoneOffset = function() { var fy=this.getFullYear(); if (!Date.prototype.stdTimezoneOffset.cache.hasOwnProperty(fy)) { var maxOffset = new Date(fy, 0, 1).getTimezoneOffset(); var monthsTestOrder=[6,7,5,8,4,9,3,10,2,11,1]; for(var mi=0;mi<12;mi++) { var offset=new Date(fy, monthsTestOrder[mi], 1).getTimezoneOffset(); if (offset!=maxOffset) { maxOffset=Math.max(maxOffset,offset); break; } } Date.prototype.stdTimezoneOffset.cache[fy]=maxOffset; } return Date.prototype.stdTimezoneOffset.cache[fy]; }; Date.prototype.stdTimezoneOffset.cache={}; Date.prototype.isDST = function() { return this.getTimezoneOffset() < this.stdTimezoneOffset(); }; 

यह सभी टिप्पणियों को ध्यान में रखते हुए और पहले सुझाए गए उत्तरों और विशेष रूप से सभी दुनियाओं को प्राप्त करने का प्रयास करता है:

1) प्रति वर्ष stdTimezoneOffset के लिए परिणामों को कैश करता है ताकि एक ही वर्ष में कई तिथियों का परीक्षण करते समय आपको इसे पुन: पेश करने की आवश्यकता न हो।

2) यह नहीं मानता है कि डीएसटी (यदि यह बिल्कुल भी मौजूद है) जरूरी है कि जुलाई में, और चाहे वह कुछ बिंदु पर हो और कुछ जगह किसी भी महीने हो। हालांकि प्रदर्शन-आधारित यह तेजी से काम करेगा यदि वास्तव में जुलाई (या महीनों के पास) वास्तव में डीएसटी हैं

3) इससे भी बदतर मामला यह प्रत्येक महीने के पहले के getTimezoneOffset की तुलना करेगा। [और एक बार प्रति वर्ष परीक्षण किया]

यह धारणा अभी भी बना देती है कि अगर डीएसटी की अवधि बड़ा है तो एक महीने में यह बड़ा है।

अगर कोई उस धारणा को हटाना चाहता है तो वह लूप को हारून कोल द्वारा प्रदान की गई सोलटिन में कुछ और बदल सकता है – लेकिन मैं अभी भी आधी साल छलांग लगाऊंगा और दो अलग-अलग ऑफसेट्स पाये जाने पर पाश से बाहर निकलना होगा]

पहले से ही हल हो चुका है, लेकिन सिर्फ सोचा था कि मुझे जिस तरह से करना है उसे जोड़ना चाहिए (यदि लोग रुचि रखते हैं)।

  function isDST(t) { //t is the date object to check, returns true if daylight saving time is in effect. var jan = new Date(t.getFullYear(),0,1); var jul = new Date(t.getFullYear(),6,1); return Math.min(jan.getTimezoneOffset(),jul.getTimezoneOffset()) == t.getTimezoneOffset(); } 

अपवर्जित उत्तर के रूप में वैसे ही काम करता है (जैनुरि और जूलि टाइमज़न ऑफसेट), फिर सशर्त वापस लौटाता है

आपका करीब है लेकिन थोड़ा दूर आपको अपने खुद के समय की गणना करने की आवश्यकता नहीं है क्योंकि यह आपकी खुद की घड़ी का परिणाम है। यह पता लगा सकता है कि क्या आप अपने स्थान में डेलाइट सेविंग टाइम का उपयोग कर रहे हैं, लेकिन ऑफसेट द्वारा निर्मित किसी दूरस्थ स्थान के लिए नहीं:

 newDateWithOffset = new Date(utc + (3600000*(offset))); 

यह अभी भी गलत होगा और एक घंटे से अगर वे डीएसटी में हैं। यदि आप वर्तमान में अपने डीएसटी के भीतर हैं या फिर तदनुसार समायोजित करते हैं तो आपको दूरस्थ समय खाते की आवश्यकता है। यह गणना करने की कोशिश करें और अपनी घड़ी को बदल दें – कहते हैं कि 2/1/2015 और घड़ी को एक घंटे में वापस रीसेट करें जैसे कि डीएसटी के बाहर। फिर उस जगह के ऑफसेट के लिए गणना करें जो अभी भी 2 घंटे पीछे होनी चाहिए। यह दो घंटे की खिड़की से एक घंटे पहले दिखाएगा। आपको अब भी घंटों के लिए खाते और समायोजन की आवश्यकता होगी। मैंने इसे NY और डेन्वेर के लिए किया और हमेशा डेन्वर में गलत (घंटा आगे) जाना

मुझे हाल ही में यूटीसी और डीएसटी के साथ एक तारीख स्ट्रिंग बनाने की जरूरत थी, और शेल्डन के जवाब के आधार पर मैंने इसे एक साथ रखा था:

 Date.prototype.getTimezone = function(showDST) { var jan = new Date(this.getFullYear(), 0, 1); var jul = new Date(this.getFullYear(), 6, 1); var utcOffset = new Date().getTimezoneOffset() / 60 * -1; var dstOffset = (jan.getTimezoneOffset() - jul.getTimezoneOffset()) / 60; var utc = "UTC" + utcOffset.getSign() + (utcOffset * 100).preFixed(1000); var dst = "DST" + dstOffset.getSign() + (dstOffset * 100).preFixed(1000); if (showDST) { return utc + " (" + dst + ")"; } return utc; } Number.prototype.preFixed = function (preCeiling) { var num = parseInt(this, 10); if (preCeiling && num < preCeiling) { num = Math.abs(num); var numLength = num.toString().length; var preCeilingLength = preCeiling.toString().length; var preOffset = preCeilingLength - numLength; for (var i = 0; i < preOffset; i++) { num = "0" + num; } } return num; } Number.prototype.getSign = function () { var num = parseInt(this, 10); var sign = "+"; if (num < 0) { sign = "-"; } return sign; } document.body.innerHTML += new Date().getTimezone() + "<br>"; document.body.innerHTML += new Date().getTimezone(true); 
 <p>Output for Turkey (UTC+0200) and currently in DST: &nbsp; UTC+0300 (DST+0100)</p> <hr> 

Moment.js लाइब्रेरी इसके समय ऑब्जेक्ट्स पर एक .isDst() विधि प्रदान करता है।

पल # आईडीएसटी जांचता है कि वर्तमान क्षण डेलाइट सेविंग टाइम में है या नहीं।

 moment([2011, 2, 12]).isDST(); // false, March 12 2011 is not DST moment([2011, 2, 14]).isDST(); // true, March 14 2011 is DST 

मैंने पाया है कि मोमेंट.जेएस लाइब्रेरी का उपयोग यहां वर्णित कुछ अवधारणाओं के साथ (जन-जून की तुलना करके) बहुत अच्छी तरह से काम करता है।

यह साधारण फ़ंक्शन वापस लौटाएगा कि उपयोगकर्ता को डेलाइट सेविंग टाइम देखने में समय क्षेत्र है या नहीं:

 function HasDST() { return moment([2017, 1, 1]).isDST() != moment([2017, 6, 1]).isDST(); } 

यह जांचने का एक सरल तरीका है कि यह काम (Windows पर) आपके समयक्षेत्र को गैर डीएसटी क्षेत्र में बदलना है, उदाहरण के लिए एरिज़ोना गलत लौटाएगा, जबकि ईएसटी या पीएसटी सच वापस करेगा।

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

जावास्क्रिप्ट में getTimezoneOffset() विधि, एक ब्राउज़र में, 00:00 टाइम ज़ोन से ऑफसेट मिनट की संख्या देता है। उदाहरण के लिए, डेलाइट सेविंग्स (डीएसटी) में अमेरिका / न्यू_ यॉर्क का समय क्षेत्र 300 नंबर देता है। 300 मिनट शून्य से 5 घंटे का अंतर है। 300 मिनट 60 मिनट से विभाजित 5 घंटे है। हर समय क्षेत्र की तुलना शून्य समय क्षेत्र, +00: 00 / आदि / जीएमटी / ग्रीनविच समय से की जाती है।

एमडीएन वेब डॉक्स

अगली बात जिसे आपको जानना चाहिए, यह है कि ऑफ़सेट के वास्तविक समय क्षेत्र के विपरीत संकेत हैं।

समय क्षेत्र के बारे में सूचना इंटरनेट असाइन नंबर प्राधिकरण (iana)

iana समय क्षेत्र

समय क्षेत्र की एक अच्छी तरह से स्वरूपित तालिका joda.org द्वारा आपूर्ति की जाती है

joda- समय समय क्षेत्र

+00: 00 या एटीसी / जीएमटी ग्रीनविच का समय है

सभी समय क्षेत्रों को +00: 00 / "आदि / जीएमटी" / ग्रीनविच समय से ऑफसेट किया जाता है

डेलाइट बचत का समय हमेशा गर्मियों में "नियमित" समय से पहले का समय होता है आप अपने घड़ियां गिरावट के मौसम में वापस सेट करें (याद करने के लिए "वापस जाएं" नारा करें)

इसलिए, डेलाइट सेविंग्स (सर्दियों) में अमेरिका / न्यू_ यॉर्क का समय नियमित समय से एक घंटे पहले है। उदाहरण के लिए, उदाहरण के लिए, गर्मियों में न्यूयॉर्क शहर में दोपहर को सामान्यतः 5 बजे क्या था, अब सुबह 4 बजे अमेरिका / न्यूयार्क समय डेलाइट सेविंग्स में है। "America / New_York" नाम का नाम "लांग फॉर्मेट" टाइम ज़ोन नाम है। अमेरिका के पूर्वी तट आमतौर पर अपने समय क्षेत्र को पूर्वी मानक समय (ईएसटी) कहते हैं

यदि आप किसी अन्य तिथि के ऑफसेट समय क्षेत्र को ऑफसेट करने के लिए आज के समय क्षेत्र की तुलना करना चाहते हैं, तो आपको यह पता होना चाहिए कि समय क्षेत्र के ऑफसेट के गणितीय संकेत (+/- "सकारात्मक / नकारात्मक") समय क्षेत्र के विपरीत है।

Joda.org पर टाइम ज़ोन तालिका देखें और "America / New_York" के लिए समय क्षेत्र ढूंढें इसमें मानक ऑफसेट के सामने नकारात्मक संकेत होगा।

धरती उसके धुरी पर काउंटर-वाइटवेट घुमाती है एक व्यक्ति ग्रीनविच में सूर्योदय को देखता है, सूर्योदय देखता है 5 घंटे पहले न्यूयॉर्क शहर में किसी को सूर्योदय दिखाई देगा। और अमेरिका के पश्चिमी तट पर किसी को सूर्योदय दिखाई देगा, जो कि अमेरिका के पूर्वी तट पर किसी के बाद सूर्योदय दिखाई देगा।

एक कारण यह है कि आपको ये सब जानना चाहिए। ताकि आप तर्कसंगत रूप से यह निर्धारित कर सकें कि क्या कुछ जावास्क्रिप्ट कोड डीएसटी स्थिति को ठीक से या नहीं मिल रहा है, बिना वर्ष के अलग-अलग समय पर हर समय क्षेत्र का परीक्षण करने के लिए।

कल्पना कीजिए कि यह न्यूयॉर्क शहर में नवंबर है, और घड़ियों को एक घंटे में वापस सेट किया गया है। न्यूयॉर्क शहर में गर्मियों में ऑफसेट 240 मिनट या 4 घंटे है।

आप जुलाई की एक तिथि बनाकर ऑफसेट की जांच कर सकते हैं।

 var July_Date = new Date(2017, 6, 1); var july_Timezone_OffSet = July_Date.getTimezoneOffset(); console.log('july_Timezone_OffSet: ' + july_Timezone_OffSet) 

ब्राउज़र के डेवलपर टूल कंसोल लॉग पर क्या प्रिंट होगा?

उत्तर है: 240

तो, अब आप जनवरी में एक तारीख बना सकते हैं और देख सकते हैं कि आपका ब्राउज़र सर्दियों के मौसम के लिए समय क्षेत्र ऑफसेट के लिए क्या देता है।

 var Jan_Date = new Date(2017, 0, 1);//Month is zero indexed - Jan is zero var jan_Timezone_OffSet = Jan_Date.getTimezoneOffset(); console.log('jan_Timezone_OffSet: ' + jan_Timezone_OffSet) 

उत्तर है: 300

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

 var today = new Date(); var todaysTimeZone = today.getTimezoneOffset(); console.log('todaysTimeZone : ' + todaysTimeZone) 

जवाब है: ? – वर्ष के समय पर निर्भर करता है

यदि आज का समय क्षेत्र ऑफसेट और गर्मी का समय क्षेत्र ऑफसेट समान है, और गर्मियों और सर्दियों के समय क्षेत्र ऑफ़सेट अलग हैं, तो तार्किक कटौती से, आज डीएसटी में नहीं होना चाहिए।

क्या आप गर्मियों और सर्दियों के समय क्षेत्र ऑफ़सेट की तुलना करना भूल सकते हैं, (यह जानने के लिए कि डीएसटी इस समय क्षेत्र के लिए उपयोग किया जाता है) और बस आज के समय क्षेत्र की तुलना गर्मियों में टीजी ऑफसेट के लिए करें, और हमेशा सही उत्तर प्राप्त करें?

 today's TZ Offset !== Summer TZ Offset 

खैर, क्या आज सर्दियों या गर्मियों में है? यदि आपको पता था कि आप निम्न तर्क लागू कर सकते हैं:

 if ( it_is_winter && ( todays_TZ_Offset !== summer_TZ_Offset) { var are_We_In_DST = true; } 

लेकिन समस्या यह है, कि आपको नहीं पता कि आज की तारीख सर्दियों या गर्मियों में है या नहीं जब भी डीएसटी शुरू होता है और बंद हो जाता है, तब प्रत्येक समय क्षेत्र के अपने नियम हो सकते हैं आपको दुनिया के हर समय क्षेत्र के हर समय क्षेत्र के नियमों का ट्रैक रखने की आवश्यकता होगी। इसलिए, यदि बेहतर और आसान तरीका है तो आप इसे बेहतर और आसान तरीके से भी कर सकते हैं।

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

अंतिम तर्क है:

 if ( DST_Is_Used_In_This_Time_Zone && ( todays_TZ_Offset !== summer_TZ_Offset) { var are_We_In_DST = true; } 

फ़ंक्शन यह निर्धारित करने के लिए कि ब्राउज़र में समय क्षेत्र डीएसटी का उपयोग करता है:

 function is_DST_Used_In_This_TimeZone() { var Jan_Date, jan_Timezone_OffSet, July_Date, july_Timezone_OffSet offsetsNotEqual, thisYear, today; today = new Date();//Create a date object that is now thisYear = today.getFullYear();//Get the year as a number Jan_Date = new Date(thisYear, 0, 1);//Month is zero indexed - Jan is zero jan_Timezone_OffSet = Jan_Date.getTimezoneOffset(); console.log('jan_Timezone_OffSet: ' + jan_Timezone_OffSet) July_Date = new Date(thisYear, 6, 1); july_Timezone_OffSet = July_Date.getTimezoneOffset(); console.log('july_Timezone_OffSet: ' + july_Timezone_OffSet) offsetsNotEqual = july_Timezone_OffSet !== jan_Timezone_OffSet;//True if not equal console.log('offsetsNotEqual: ' + offsetsNotEqual); return offsetsNotEqual;//If the offsets are not equal for summer and //winter then the only possible reason is that DST is used for //this time zone }