2010-11-30 11 views
10

मैं जावास्क्रिप्ट में महीनों में अंतर की गणना कैसे करूं?जावास्क्रिप्ट माह अंतर

कृपया ध्यान दें कि इस तरह के रूप में इसी तरह प्रश्न हैं: What's the best way to calculate date difference in Javascript

लेकिन इन एमएस अंतर के आसपास आधारित हैं, जब कुछ महीने दूसरों की तुलना में दिन के विभिन्न संख्या है!

2 तिथियों के बीच महीने अंतर की गणना करने का कोई आसान तरीका?

बस स्पष्ट होना, मुझे पता है कि कितने महीने दिनों की अवधि की जरूरत है, उदाहरण के लिए:

Jan 29th 2010, and Feb 1st 2010 = 2 months 
Jan 1st 2010, and Jan 2nd 2010 = 1 month 
Feb 14th 2010, Feb 1st 2011 = 13 months 
Feb 1st 2010, March 30th 2011 = 14 months 
+0

महीने के अंतर से आपका क्या मतलब है? पूरे कैलेंडर महीने जैसे 12Apr2010 -> 16Jun2010 = 1; या आरंभ तिथि से लिया गया महीना लंबाई जैसे 12Apr2010 -> 16Jun2010 = 2. या क्या आप दशमलव भाग की भी गणना करना चाहते हैं? कौनसे मामलेमें। प्रत्येक दिन क्या मूल्य मिलता है? क्या फरवरी में एक महीने में 1/28 मिलता है जबकि दिसंबर में एक महीने 1/31 हो जाता है? फिर लीप साल हैं ... –

+0

http://stackoverflow.com/questions/2536379/difference-in-months-between-two-dates-in-javascript – ArK

+0

क्षमा करें, यह स्पष्ट होना चाहिए कि यह कुल # महीनों की तारीख सीमा है । –

उत्तर

19
DisplayTo.getMonth() - DisplayFrom.getMonth() + (12 * (DisplayTo.getFullYear() - DisplayFrom.getFullYear()))); 

getMonth शून्य से getMonth आप दिनांक दो महीने के बीच महीने के अंतर देता है।

हम फिर साल के अंतर से 12 गुणा करते हैं और परिणामस्वरूप हमें पूर्ण महीना अवधि देते हैं।

+4

अच्छा एक लाइनर .. अगर कोई दिलचस्पी लेता है तो परीक्षण केस यहां उपलब्ध है। http://jsfiddle.net/E5Bz3/1/ :) –

+1

ग्रेट सॉल्यूशन, मैंने इस जगह के लिए सभी जगहों की खोज की ... धन्यवाद .. – hminaya

+0

काम नहीं करता है, उदाहरण के लिए, StartDate = Dec 12, 2012 और EndDate = 1 जनवरी, 2013. परिणाम 1 होगा, न कि 2. – Marina

5

[संपादित] टिप्पणी के आधार पर मैंने सही किया खड़े हैं। स्वीकार किए जाते हैं उत्तर का उपयोग करना मैं somethng की तरह उपयोग कर सकेंगे:

var datefrom = new Date('2001/03/15') 
    ,dateto = new Date('2011/07/21') 
    ,nocando = datefrom<dateto ? null : 'datefrom > dateto!' 
    ,diffM = nocando || 
      dateto.getMonth() - datefrom.getMonth() 
       + (12 * (dateto.getFullYear() - datefrom.getFullYear())) 
    ,diffY = nocando || Math.floor(diffM/12) 
    ,diffD = dateto.getDate()-datefrom.getDate() 
    ,diffYM = nocando || 
       (diffY>0 ? ' Year(s) ' : '') 
       + diffM%12+' Month(s) '+(diffD>0? (diffD+' day(s)') : '') ; 

console.log(diffYM); //=> 10 Year(s) 4 Month(s) 6 day(s) 
+0

यह गलत है यदि 2 तिथियां हैं: दिनांक 1 = नई तिथि ('2011/1/04') , दिनांक 2 = नई तिथि ('2010/12/04') यह गलत जवाब देगी – ToDayIsNow

+0

आप बिल्कुल सही हैं, गुल्सेंस ऑनलाइनर का बेहतर उपयोग करें। उस पर आधारित उत्तर का जवाब। – KooiInc

3

मैं वेबसाइट http://ditio.net/2010/05/02/javascript-date-difference-calculation/ पर निम्न पाया:

inMonths: function(d1, d2) { 
     var d1Y = d1.getFullYear(); 
     var d2Y = d2.getFullYear(); 
     var d1M = d1.getMonth(); 
     var d2M = d2.getMonth(); 

     return (d2M+12*d2Y)-(d1M+12*d1Y); 
    } 

आपके मामले में, जब से तुम तिथि अवधि में सभी महीनों शामिल करना चाहते हैं, मैं सिर्फ ऊपर कोड को संशोधित करेगा इसे करने के लिए 1 जोड़कर: return (d2M+12*d2Y)-(d1M+12*d1Y) + 1;

1
function calcualteMonthYr(){ 
    var fromDate =new Date($('#txtDurationFrom2').val()); // Date picker (text fields) 
    var toDate = new Date($('#txtDurationTo2').val()); 
    var months=0; 
     months = (toDate.getFullYear() - fromDate.getFullYear()) * 12; 
     months -= fromDate.getMonth(); 
     months += toDate.getMonth(); 
      if (toDate.getDate() < fromDate.getDate()){ 
       months--; 
      } 
    $('#txtTimePeriod2').val(months); // result 
} 
+0

शायद आपके उत्तर पर थोड़ा सा विस्तृत करें – Scorpio

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