2012-02-03 42 views
106

का उपयोग कर दो तिथियों के बीच दिनों की संख्या की गणना कैसे करें मेरे पास दिनांक पिकर नियंत्रण से दो इनपुट तिथियां हैं। मैंने प्रारंभ तिथि 2/2/2012 और समाप्ति दिनांक 2/7/2012 चुना है। मैंने इसके लिए निम्नलिखित कोड लिखा है।जावास्क्रिप्ट: जावास्क्रिप्ट

मैं 6 के रूप में परिणाम प्राप्त करना चाहिए, लेकिन मैं 5.

function SetDays(invoker) { 
    var start = $find('<%=StartWebDatePicker.ClientID%>').get_value(); 
    var end = $find('<%=EndWebDatePicker.ClientID%>').get_value(); 

    var oneDay=1000 * 60 * 60 * 24; 
    var difference_ms = Math.abs(end.getTime() - start.getTime()) 
    var diffValue = Math.round(difference_ms/oneDay); 
} 

किसी को भी मुझे बता सकते हैं कि कैसे मैं सटीक अंतर प्राप्त कर सकते हैं मिल रहा है?

+1

लेकिन ... 7 शून्य 2 5 है ... – Pointy

+0

आपको परिणाम = 6 क्यों मिलना चाहिए ??? 07 - 02 = 05 दिन .... –

+0

लेकिन 2 से 7 दिनों की अवधि 2,3,4,5,6,7 = 6 दिन है। – Supr

उत्तर

296

http://momentjs.com/ या https://date-fns.org/

से पल डॉक्स:

var a = moment([2007, 0, 29]); 
var b = moment([2007, 0, 28]); 
a.diff(b, 'days') // =1 

या शुरू शामिल करने के लिए:

a.diff(b, 'days')+1 // =2 

बीट्स मेस्सी मैन्युअल रूप से टाइमस्टैम्प और समय क्षेत्र के साथ।

अपने विशिष्ट उपयोग के आधार पर, आप कर सकते हैं या तो

  1. उपयोग a/b.startOf('day') और/या a/b.endOf('day') (के रूप में टिप्पणी में @kotpal ने सुझाव दिया) समावेशी या "समाप्त होता है" पर विशेष होने के लिए मजबूर करने के लिए diff ।
  2. फ्लोरिंग पॉइंट diff प्राप्त करने के लिए तीसरा तर्क true सेट करें, जिसके बाद आप Math.floor, Math.ceil या Math.round आवश्यकतानुसार कर सकते हैं।
  3. विकल्प 2 'days' के बजाय 24*60*60 द्वारा विभाजित करके भी पूरा किया जा सकता है।
+0

धन्यवाद यह मेरे लिए काम किया। –

+12

moment.js ऋणात्मक मान देगा यदि

+4

समय-समय को अनदेखा करने के लिए जागरूक रहें - अन्यथा आपको अलग-अलग परिणाम मिलेंगे उसी तारीख के लिए लेकिन अलग-अलग समय के साथ (जैसे दिनांक पिकर नियंत्रण से)। पल (कुछडेट) का उपयोग करें .startOf ('day') एक diff (या दिनांक/पल ऑब्जेक्ट के समय-भाग के प्रति संवेदनशील होने वाले किसी अन्य ऑपरेशन) से पहले 00:00:00 को स्पष्ट रूप से समय भाग सेट करने के लिए – kotpal

8

प्रयास करें:

//Difference in days 

var diff = Math.floor((start - end)/86400000); 
alert(diff); 
+0

मुझे लगता है कि यह मूल रूप से सही है लेकिन क्या यह अनिवार्य रूप से ओपी में क्या नहीं है? – Pointy

+0

जिस तरह से उसने लिखा था, मैंने नोटिस नहीं किया, लेकिन हाँ, बहुत कुछ! : पी – Richard

+0

यह क्लीनर और बहुत पठनीय है। –