2012-09-26 18 views
19

मैं moment.js 1.7.0 का उपयोग कर रहा हूं ताकि आज की तारीख को किसी अन्य तारीख के साथ आजमाया जा सके और diff फ़ंक्शन कह रहा है कि वे किसी कारण से 1 दिन अलग हैं।moment.js diff गलत

कोड:

var releaseDate = moment("2012-09-25"); 
var now = moment(); //Today is 2012-09-25, same as releaseDate 
console.log("RELEASE: " + releaseDate.format("YYYY-MM-DD")); 
console.log("NOW: " + now.format("YYYY-MM-DD")); 
console.log("DIFF: " + now.diff(releaseDate, 'days')); 

सांत्वना:

RELEASE: 2012-09-25 
NOW: 2012-09-25 
DIFF: 1 

विचार?

+0

मैं है 1.7.0, मैं अपने कोड का परीक्षण किया और मैं 'DIFF मिला:

मैं isSame का इस्तेमाल किया था? – rationalboss

+0

मुझे लगता है कि यह टाइमज़ोन या यूटीसी/स्थानीय के साथ कुछ करना है। अगर मैं 'रिलीजडेट' के '.hours()' को लॉग करता हूं और 'अब' यह मेरे लिए अलग-अलग परिणाम देता है। अगर मैं 'var now = moment()। Sod()' [(docs)] (http://momentjs.com/docs/#/manipulating/sod/) का उपयोग करता हूं, तो यह वर्तमान में अपेक्षित काम करता है, लेकिन मुझे यकीन नहीं है मुझे उस पर कितना भरोसा है। – manafire

उत्तर

44

documentation (और संक्षिप्त परीक्षण) के आधार पर, moment.js तारीख वस्तुओं के आसपास रैपर बनाता है। बयान:

var now = moment(); 

एक "पल" वस्तु बनाता है कि में अपने दिल एक नई तिथि वस्तु, new Date() द्वारा के रूप में यदि बनाया घंटे, मिनट और सेकंड वर्तमान समय पर सेट कर दिया जाएगा ताकि है।

बयान:

var releaseDate = moment("2012-09-25"); 

एक पल के उद्देश्य यह है कि अपने दिल में एक नया दिनांक वस्तु new Date(2012, 8, 25) जहां घंटे, मिनट और सेकंड सभी स्थानीय समय क्षेत्र के लिए शून्य पर सेट हो जाएगा द्वारा के रूप में अगर पैदा कर दी है बनाता है ।

moment.diffगोलाकार दो तिथियों के बीच एमएस में अंतर के आधार पर एक मान देता है। पूरा मूल्य देखने के लिए, तीसरे पैरामीटर के रूप में true पारित:

now.diff(releaseDate, 'days', true) 
------------------------------^ 

तो यह जब कोड चलाया जाता है दिन के समय पर निर्भर करेगा और स्थानीय समय क्षेत्र है कि क्या now.diff(releaseDate, 'days') शून्य या एक है, तब भी जब पर चलने एक ही स्थानीय तारीख।

आप तुलना करना चाहते हैं, बस तिथियाँ, तो का उपयोग करें:

var now = moment().startOf('day'); 

जो स्थानीय समयानुसार सुबह 0:00:00 का समय तय करेंगे।

+0

स्पष्टीकरण के लिए धन्यवाद! 'पल()। Sod()' का उपयोग करके मेरी राउंडिंग समस्या को समाप्त कर दिया गया है, जैसा आपने उल्लेख किया है कि तीसरे पैरामीटर का उपयोग करके परीक्षण किया गया है। – manafire

+2

ध्यान दें कि 'sod' केवल संस्करण 2 तक काम करेगा, जब आपको' startOf ('day') 'का उपयोग करना होगा। – RobG

2

रॉब का उत्तर प्रश्न के लिए सही है, इसलिए यह उत्तर केवल उन लोगों के लिए है जो पलज में तिथियों की तुलना कैसे करें।

var compare = moment(dateA).startOf('day') === moment(dateB).startOf('day'); 

यह मेरे लिए काम नहीं किया:

मैं उपर्युक्त की तरह startOf ('दिन') का उपयोग करने का प्रयास किया। क्या आप वाकई कुछ भी नहीं आपके moment.js में बदल दिया गया था रहे हैं - 0`:

var compare = moment(dateA).isSame(dateB, 'day');