2012-01-10 14 views
10

मेरे पास एक जावास्क्रिप्ट उलटी गिनती टाइमर है जो निर्दिष्ट दिनांक और समय ले कर काम करता है, और इसे वर्तमान दिनांक और समय से तुलना करता है। मुद्दा यह है कि वर्तमान समय उपयोगकर्ताओं के टाइमज़ोन के सापेक्ष है, इसलिए शेष समय उपयोगकर्ताओं के बीच अलग है।पूर्ण टाइमज़ोन का उपयोग कर जावास्क्रिप्ट उलटी गिनती?

मेरे मामले में जीएमटी -5 घंटों में एक विशिष्ट टाइमज़ोन में एक समय तक टाइमर उलटी गिनती कैसे हो सकती है?

मुझे समझ में आता है कि मैं उपयोगकर्ताओं को टाइमज़ोन प्राप्त करने के लिए नीचे दिए गए कोड का उपयोग कर सकता हूं, लेकिन मैं इसका उपयोग कैसे कर सकता हूं।

myDateObj.getTimezoneOffset()/60

+0

http://countdownjs.org – mckamey

उत्तर

6

एक त्वरित खोज से पता चलता है:

var d = new Date(); 

var localTime = d.getTime(); 

var localOffset = d.getTimezoneOffset() * 60000; 

var utc = localTime + localOffset; 

// obtain and add destination's UTC time offset 
// for example, Bombay 
// which is UTC + 5.5 hours 
var offset = 5.5; 
var bombay = utc + (3600000*offset); 

var nd = new Date(bombay); 
alert("Bombay time is " + nd.toLocaleString() + "<br>"); 

jsFiddle: http://jsfiddle.net/GEpaH/

convert-the-local-time-to-another-time-zone-with-this-javascript

लेख शब्दशः आप इस उदाहरण हो जाता है के बाद

बस आप अपने वांछित ऑफसेट के साथ pdate और आप सभी सेट होना चाहिए।

0

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

यदि आप विभिन्न उपयोगकर्ताओं के बीच समय की कोशिश कर रहे हैं तो आपको कुछ केंद्रीकृत समय प्राधिकरण का संदर्भ देने की आवश्यकता है।

मैं अपने स्वयं के सर्वर के एक एजेक्स प्रकार कॉल (XMLHttpRequest) का उपयोग करता हूं जो मेरे सर्वर का समय देता है। इस तरह प्रत्येक उपयोगकर्ता एक ही समय में संदर्भित कर रहा है।

Google XMLHttp आपको आवश्यक जेएस कोड के उदाहरण ढूंढने के लिए अनुरोध करता है (और इस तरह की एक सरल सेवा के लिए संबंधित सर्वर-साइड कोड बार-बार)।

पीएस: मैं कुछ साधारण क्लाइंट सॉफ़्टवेयर भी इंस्टॉल करूंगा ताकि प्रत्येक सर्वर पर समय पर एक परमाणु घड़ी के साथ सिंक करके सटीक मेरे सर्वर पर समय लगे।

5

आप उपयोग कर सकते हैं Date.UTC(year,month,day,hours,minutes,seconds,msec)

यह सिर्फ दिनांक निर्माता की तरह चल रही है, लेकिन ग्रीनविच समय (ऑफसेट = 0) स्थानीय समय के बजाय पर बहस के टाइमस्टैम्प देता है।

var localtime=new Date(Date.UTC(year,month,day,hours,minutes,seconds,msec)) 

निर्दिष्ट यूटीसी समय के लिए स्थानीय समय देता है।

हर कोई (जिसकी घड़ी सही ढंग से सेट की गई है) एक साथ उलटी गिनती समाप्त कर देगी।

0

आपको जावास्क्रिप्ट के साथ सटीक तिथि नहीं मिल सकती क्योंकि यह क्लाइंट-साइड है और यह उपयोगकर्ता की ऑपरेटिंग सिस्टम घड़ी पर आधारित है। आप सर्वर-साइड टाइमज़ोन के आधार पर उलटी गिनती प्रदर्शित करने के लिए jCounter का उपयोग कर सकते हैं।

लेकिन हे, अगर आप वास्तव में इसे स्वयं करना चाहते हैं, तो jCounter डाउनलोड करें और आपको डेटटाइम मिलेगा।PHP फ़ाइल के साथ-साथ वर्तमान दिनांक सर्वर-साइड को टाइमस्टैंप के रूप में पुनर्प्राप्त करता है (इसे सर्वर पर नहीं होना चाहिए, आपके डेस्कटॉप पर नहीं: पी)

जांचें कि वह स्क्रिप्ट उस फ़ाइल का उपयोग कैसे करती है और वास्तविक वर्तमान को पुनर्प्राप्त करती है इसके खिलाफ काम करने की तारीख और सटीक उलटी गिनती की गणना करें।

चीयर्स

1

बस समय क्षेत्र के साथ एक RFC 2822-timestamp के साथ एक तिथि पैदा करते हैं। उस समय उपयोगकर्ताओं को वर्तमान स्थान (ओएस सेटिंग्स के आधार पर) में परिवर्तित कर दिया जाएगा। daylight savings time के लिए सुधार के साथ भी!

मैं नॉर्वे में हूं, जो वर्तमान में डेलाइट बचत समय में है, इसलिए यह जीएमटी + 2 है। यहाँ क्या होता है जब मैं एक दिनांक वस्तु GMT-0500 का उपयोग कर बनाने है:

var myDateObj = new Date("Fri Apr 17 2015 12:00:00 GMT-0500 (CDT)"); 
myDateObj.toString(); 

शुक्र अप्रैल 17 2015 19:00:00 GMT + 0200 (CEST)

सही पाने के लिए कैसे आपके स्थान के लिए दिनांक स्ट्रिंग? यदि यह समय क्षेत्र है जिसमें आप वर्तमान में हैं; अपने ब्राउज़र dev-tools कंसोल में बस myDateObj.toString() करें। एक अलग समय क्षेत्र के लिए; पहले अपने ऑपरेटिंग सिस्टम में टाइमज़ोन बदलें। (Or read the RFC)

new Date().toString(); 

शुक्र अप्रैल 17 2015 12:36:57 GMT + 0200 (CEST)

+0

"नोट: तिथि कन्स्ट्रक्टर (और दिनांक .parse, वे बराबर हैं) के साथ डेट स्ट्रिंग का पार्सिंग ब्राउज़र अंतर और असंगतताओं के कारण दृढ़ता से निराश है।" - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date – Fabian

0

दृष्टिकोण ब्रैंडन एक यूटीसी स्थानांतरित समय की गणना करने ले लिया है को संशोधित करने के लिए, हम कर सकते हैं स्लिम दिनांक वस्तु की एक दो लाइन विस्तार में नीचे कोड:

/* getOffsetDate - Returns a Date shifted by a certain offset 
* @param offset the UTC offset to shift, in hours 
* @return new date object shifted by UTC offset 
*/ 
Date.prototype.getOffsetDate = function(offset) { 
    utc = this.getTime() + (this.getTimezoneOffset() * 60000); 
    return new Date(utc + (3600000*offset)); 
} 

फिर आप गणना कर सकते हैं UTC-5 तारीख स्थानांतरित कर दिया इस प्रकार है:

myDate = new Date().getOffsetDate(-5); 

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

संबंधित मुद्दे