2011-09-20 14 views
8

मैंने कंसोल में "दिनांक" टाइप किया ... और मुझे Tue Sep 20 01:01:49 PDT 2011 ... जो सही है।मेरा जावास्क्रिप्ट (node.js) मुझे गलत टाइमस्टैंप कैसे दे रहा है?

लेकिन फिर मैं इसे node.js में करता हूं, और मुझे गलत समय मिलता है।

var ts = String(Math.round(new Date().getTime()/1000)); 

आउटपुट है: 1316505706, जो एक घंटा पीछे है।

उत्तर

-4

date कंसोल में सर्वर समय लौटाएगा, जबकि वेबपृष्ठ पर जावास्क्रिप्ट का उपयोग करने से ग्राहक का स्थानीय समय वापस आ जाएगा।

+4

मैं node.js का उपयोग कर रहा हूं, इसलिए यह सर्वर जावास्क्रिप्ट है – TIMEX

4

कारण getTime समारोह यूटीसी समय क्षेत्र में समय देता है जो:

getTime विधि द्वारा दिए गए मान के बाद से 1 जनवरी 1970 00:00:00 यूटीसी मिलीसेकेंड की संख्या है। आप इस विधि का उपयोग किसी दिनांक दिनांक और दिनांक को किसी अन्य दिनांक ऑब्जेक्ट को निर्दिष्ट करने में सहायता के लिए कर सकते हैं।

क्या आप वर्तमान समय क्षेत्र में यूनिक्स टाइमस्टैम्प लाने के लिए चाहते हैं, आप getTimezoneOffset विधि का उपयोग कर सकते हैं:

var date = new Date(); 
var ts = String(Math.round(date.getTime()/1000) + date.getTimezoneOffset() * 60); 
8

@KARASZI मूल कारण के बारे में पूरी तरह से सही है: यूनिक्स टाइमस्टैम्प हमेशा जब तक आप यूटीसी हैं उन्हें कुशल बनाना। मैं सुझाव दूंगा कि यदि आप यूनिक्स टाइमस्टैंप चाहते हैं तो आपको इसे यूटीसी में छोड़ देना चाहिए, और यदि आपको उपयोगकर्ता को प्रारूपित समय प्रदर्शित करने की आवश्यकता है तो केवल स्थानीय समय में कनवर्ट करें।

ऐसा करने का पहला लाभ यह है कि आपके सभी सर्वर एक ही समय में "बोल सकते हैं"। उदाहरण के लिए, यदि आपने अमेज़ॅन ईसी 2 यूएस ईस्ट और अमेज़ॅन ईसी 2 यूएस वेस्ट में सर्वर तैनात किए हैं और वे एक सामान्य डेटाबेस साझा करते हैं, तो आप हर समय टाइमज़ोन रूपांतरणों के बारे में चिंता किए बिना अपने डेटाबेस में और अपने सर्वर पर यूटीसी टाइमस्टैम्प का उपयोग कर सकते हैं। यह यूटीसी टाइमस्टैम्प का उपयोग करने का एक शानदार कारण है, लेकिन यह आपके लिए लागू नहीं हो सकता है।

इसका दूसरा लाभ यह है कि आप डेलाइट सेविंग टाइम (या टाइमज़ोन या तो, यदि आप चल रहे प्लेटफॉर्म पर समय माप रहे हैं) के बारे में चिंता किए बिना बीत चुके समय के मामले में चीजों को माप सकते हैं!)। यह बहुत अधिक नहीं आता है, लेकिन अगर आपके पास ऐसी स्थिति थी जहां कुछ नकारात्मक समय लगे क्योंकि स्थानीय समय "मापने" के दौरान एक घंटा वापस गिर गया, तो आप बहुत उलझन में होंगे!

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

var ts = Date.now()/1000; 
1

नोट आपको लगता है कि बहुत कम त्रुटि प्रवण दिनांक और समय हेरफेर के लिए है timezonecomplete या समय क्षेत्र-js जो एक अंतरफलक है की तरह एक Node.js पैकेज का उपयोग करके इस भ्रम से बचने कर सकते हैं।

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