2013-08-02 6 views
15

मैं एक वेब सेवा है जो निम्न स्ट्रिंग के रूप में एक तारीख लौट रहा है।Moment.js और यूनिक्स काल रूपांतरण

moment("/Date(1377907200000)/") =>Fri Aug 30 2013 20:00:00 GMT-0400

कि सब के सब ठीक है। लेकिन जब मैं ऑब्जेक्ट पर unix() पर कॉल करता हूं तो मुझे मूल्य 1377907200 दिया जाता है। हालांकि, यह Fri Jan 16 1970 17:45:07 GMT-0500 से मेल खाता है। मैं सिर्फ unix() द्वारा लौटाए गए मान को गुणा कर सकता हूं लेकिन यह मेरे लिए मैला लगता है। मुझे संदेह है कि unix() पर कॉल करके मैं जो कर रहा हूं वह बिल्कुल वैसा ही नहीं है जो मुझे लगता है। unix() पर कॉल करते समय मुझे किसी प्रकार का प्रारूप निर्दिष्ट करने की आवश्यकता है? मुझे यहां क्या समझ नहीं आ रहा है?

JSFidle showing the conversion to moment and then back.

+0

आपको उस तारीख ऑब्जेक्ट में कनवर्ट करने की आवश्यकता नहीं है, पल 'पल (1377907200000)' ठीक ठीक कर सकता है। उत्सुक क्यों वेब सेवा इस तरह की तारीख लौटाती है। – mix3d

+0

हम एक वेब सेवा का उपयोग करते हैं जो इसे भी लौटाता है - ऐसा इसलिए है क्योंकि एपीआई का लक्षित उपभोक्ता आमतौर पर जावास्क्रिप्ट होता है, जो सेकेंड के बजाय "एपोक से मिलीसेकंड" करता है। यह सबसे संभावित उपभोक्ता को लक्षित है। –

उत्तर

48

मेगर द्वारा प्रदान किया गया उत्तर सख्ती से एक जावास्क्रिप्ट/यूनिक्स समय परिप्रेक्ष्य से सही है। हालांकि, अगर आप केवल 1000 से गुणा करते हैं, तो आप किसी भी उप-दूसरे परिशुद्धता को खो देंगे जो आपके डेटा में मौजूद हो सकता है।

Moment.js in the docs वर्णित अनुसार दो अलग-अलग विधियों की पेशकश करता है। .unix() सेकंड में मान देता है। यह प्रभावी रूप से 1000 से विभाजित है और किसी भी दशमलव को कम कर रहा है। आप .valueOf() विधि का उपयोग करना चाहते हैं, जो संशोधन के बिना मिलीसेकंड लौटाता है।

+1

अतिरिक्त विवरण के लिए धन्यवाद। कम से कम इस मद के लिए जिसकी आवश्यकता नहीं होगी क्योंकि ग्रैन्युलरिटी सिर्फ एक दिन है। –

+0

ओह, असल में, मैं देखता हूं कि मुझे वही देता है जो मुझे अपेक्षित था। मैं मूल्य को किसी भी तरह से संशोधित नहीं करता हूं, इसलिए वास्तव में आपका उत्तर आदर्श है। –

+0

क्षमा करें, meagar .. –

10

जावास्क्रिप्ट भूमि में, जब आप एक पूर्णांक के लिए एक Date कनवर्ट करते हैं, आप यूनिक्स काल के बाद से मिली सेकंड के एक नंबर मिलता है। परंपरागत यूनिक्स समय युग के बाद सेकंड की संख्या है। 1000 से गुणा करना सही विकल्प है।

+0

यह समझ में आता है। स्पष्टीकरण के लिए धन्यवाद। –

+3

या बस 'पल ("/ तिथि (1377907200000) /")। ToDate()। GetTime() ' –

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