2012-08-31 10 views
6

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

var offset = new Date().getTimezoneOffset(); 

अब इस समारोह मुझे 180 पर लौट आता है क्योंकि मैं अर्जेंटीना में हूँ, मैं अलग-अलग समय-क्षेत्रों के साथ परीक्षण करने के लिए की जरूरत है। कोई जानता है कि यह कैसे करें? बहुत धन्यवाद !!

+0

अपने कंप्यूटर पर समय-क्षेत्र बदलें। यही वह जगह है जहां ब्राउज़र इसे प्राप्त करता है। –

+2

आप अपने ब्राउज़र को एक अलग TZ के साथ भी शुरू कर सकते हैं: http://stackoverflow.com/questions/11453740/fake-time-zone-for-web-app-testing –

उत्तर

16

स्वीकार्य उत्तर वास्तव में Date.getTimezoneOffset विधि का नकल नहीं करता है, इसके बजाय यह आपको एक ही नाम के साथ एक अलग विधि का उपयोग करने की अपेक्षा करता है।

यह डेट ऑब्जेक्ट्स पर स्वयं काम नहीं करेगा और जैसा कि कार्ल मेयर बताते हैं, यह MomentJS जैसे पुस्तकालयों के लिए काम नहीं करेगा।

एक बेहतर तरीका Date प्रोटोटाइप पर getTimezoneOffset विधि ओवरराइड करने के लिए, ताकि Date के सभी उदाहरणों ओवरराइड विधि है।

d = new Date(); // Mon Jul 13 2015 10:58:12 GMT+0200 (CEST) 
alert(d.getTimezoneOffset()); // -120, My local "real" timezone. 

// Save the original method. 
var getTimezoneOffset = Date.prototype.getTimezoneOffset; 

Date.prototype.getTimezoneOffset = function() { 
    return 160; 
} 
// Now Date objects will have the mocked timezone offset 
alert(d.getTimezoneOffset()); // 160, The mocked timezone. 

// Now restore the method to its original version 
Date.prototype.getTimezoneOffset = getTimezoneOffset; 
alert(d.getTimezoneOffset()); // -120 
+0

आप जिस लाइब्रेरी का उपयोग करते हैं उसके आधार पर, कुछ पुस्तकालय इसे "अपना रास्ता" करना चाहते हैं। और अतिरिक्त कोड के साथ इन पुस्तकालयों को "ठीक करने" की कोशिश करने से अनपेक्षित रूप से चीजें तोड़ सकती हैं .... खासकर उन लोगों के लिए [हॉलीवुड सिद्धांत] (https://en.wikipedia.org/wiki/Inversion_of_control)। यदि कोई [उचित डेवलपर टूल] है (http://stackoverflow.com/questions/4976696/how-do-i-test-my-browser-timezone- निर्भर- अनुप्रयोग-againts-different-timezo#comment58949204_4976769) बेहतर होगा इसके लिए .... – Pacerier

+0

उत्तर मुझे समझ में आता है, लेकिन कोड को देखकर, मूल संस्करण को सहेजने के लिए कथन गुम हो सकता है, जैसे 'var getTimezoneOffset = Date.prototype.getTimezoneOffset; ' – mikeapr4

+0

धन्यवाद @ mikeapr4, आप सही हे। मैंने लापता असाइनमेंट जोड़ा। –

-7

आप इसके लिए एक फ़ंक्शन का उपयोग कर सकते हैं।

function getTimezoneOffset() { 
    if (DEBUG) { 
    return 600; // for Australian Eastern Standard Time 
    } 

    return new Date().getTimezoneOffset(); 
} 

कहाँ DEBUG एक चर आप या परीक्षण नहीं करते कि क्या यह निर्धारित करने के पहले पर सेट है।

फिर डेट ऑब्जेक्ट की विधि के बजाय उस कोड को अपने कोड में उपयोग करें।

+5

यदि आप लाइब्रेरी का उपयोग कर रहे हैं तो यह आपकी सहायता नहीं करता है 'MomentJS' की तरह - आप इसे अपने रैपर फ़ंक्शन का उपयोग करने के लिए मजबूर नहीं कर सकते हैं। –

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