दिलचस्प पोस्ट
WinRT में UI थ्रेड पर कोड चलाएं विशिष्ट फ़ील्ड वैल्यू के अनुसार पहले क्रम देना ब्राउज़र को यूआरएल में यूआरएल पर कैसे जाना है? POST विधि के साथ स्विफ्ट में HTTP अनुरोध जावास्क्रिप्ट के साथ टच स्क्रीन उपकरणों का पता लगा रहा है कमांड लाइन स्ट्रिंग की अधिकतम लंबाई मैं एक SQLite डेटाबेस कैसे अनलॉक करूँ? प्लस चिन्ह '+ नई तिथि' में क्या होता है Printf / string.format के बराबर जावास्क्रिप्ट जावा में उपयोगी पर्यावरण सेटिंग्स की सूची कस्टम फेसबुक लॉगिन बटन – एंड्रॉइड पॉइंटर्स बनाम पैरामीटर और रिटर्न वैल्यूज़ में मान मैं डिक्ट को बचाने के लिए अचार कैसे का उपयोग कर सकता हूं? जावा 7 कोड को जावा 7 जेवीएम पर चलाने के लिए संकलित किया जा सकता है? रूबी में मैं एचटीएमएल संस्थाओं को एनकोड / व्याख्या कैसे करूं?

जावास्क्रिप्ट के साथ महीने में दिनों की संख्या निर्धारित करने का सबसे अच्छा तरीका क्या है?

मैं इस फ़ंक्शन का उपयोग कर रहा हूं लेकिन मैं जानना चाहता हूं कि इसे पाने के लिए सबसे प्रभावी और सटीक तरीका क्या है।

function daysInMonth(iMonth, iYear) { return 32 - new Date(iYear, iMonth, 32).getDate(); } 

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट के साथ महीने में दिनों की संख्या निर्धारित करने का सबसे अच्छा तरीका क्या है?"

 function daysInMonth(month, year) { return new Date(year, month, 0).getDate(); } console.log(daysInMonth(2, 1999)); // February in a non-leap year console.log(daysInMonth(2, 2000)); // February in a leap year 

यदि आप अक्सर इस फ़ंक्शन को कॉल करते हैं, तो यह बेहतर प्रदर्शन के लिए मूल्य कैश करने के लिए उपयोगी हो सकता है।

FlySwat के जवाब का कैशिंग संस्करण यहां है:

 var daysInMonth = (function() { var cache = {}; return function(month, year) { var entry = year + '-' + month; if (cache[entry]) return cache[entry]; return cache[entry] = new Date(year, month, 0).getDate(); } })(); 

कुछ जवाब (अन्य प्रश्नों पर भी) लीप-वर्ष की समस्याओं या दिनांक वस्तु का इस्तेमाल करते हैं यद्यपि जावास्क्रिप्ट की Date object 1 जनवरी, 1 9 70 के दोनों तरफ लगभग 285616 साल (100,000,000 दिन) को कवर करती है, मुझे विभिन्न ब्राउज़रों (सबसे विशेषकर साल 0 से 99) में सभी तरह की अप्रत्याशित तिथि असंगतता से तंग आ गया था। मैं भी उत्सुक था कि यह कैसे गणना करना है

इसलिए मैंने सही ( प्रोलेप्टिक ग्रेगोरियन / एस्ट्रोनॉमिकल / एस्ट्रोनॉमिकल / एस्ट्रोनॉमिकल / एस्ट्रोनॉमिकल / एस्ट्रोनॉमिकल / आईएसओ 8601: 2004 (खंड 4.3.2.1) के लिए एक साधारण और ऊपर सभी, छोटे एल्गोरिदम लिखा, तो वर्ष 0 मौजूद है और एक लीप वर्ष और नकारात्मक साल समर्थित हैं ) दिन की संख्या किसी दिए गए महीने और वर्ष के लिए
यह शॉर्ट-सर्किट बिटमैस्क-मॉड्यूलो लीप युयर एल्गोरिदम (थोड़ी सी जेएस के लिए संशोधित) और आम मॉड -8 महीने एल्गोरिदम का उपयोग करता है।

ध्यान दें कि AD/BC नोटेशन में, वर्ष 0 एडी / बीसी अस्तित्व में नहीं है: इसके बजाय वर्ष 1 BC लीप-वर्ष है!
यदि आपको बीसी नोटेशन के लिए खाते की आवश्यकता है तो बस पहले एक साल (अन्यथा सकारात्मक) वर्ष-मूल्य घटाएं !! (या वर्ष से आगे के वर्ष 1 लिए गणना करें।)

 function daysInMonth(m, y){ return m===2?y&3||!(y%25)&&y&15?28:29:30+(m+(m>>3)&1); } 
 <!-- example for the snippet --> <input type="text" value="enter year" onblur=" for( var r='', i=0, y=+this.value ; 12>i++ ; r+= 'Month: ' + i + ' has ' + daysInMonth(i, y) + ' days<br>' ); this.nextSibling.innerHTML=r; " /><div></div> 

भ्रम को दूर करने के लिए मैं संभवतः महीने की स्ट्रिंग बनाऊंगा क्योंकि यह वर्तमान में 1 आधारित है।

 function daysInMonth(month,year) { monthNum = new Date(Date.parse(month +" 1,"+year)).getMonth()+1 return new Date(year, monthNum, 0).getDate(); } daysInMonth('feb', 2015) //28 daysInMonth('feb', 2008) //29 

Moment.js के साथ आप दिनों का उपयोग कर सकते हैंमॉनथ () विधि:

 moment().daysInMonth(); // number of days in the current month moment("2012-02", "YYYY-MM").daysInMonth() // 29 moment("2012-01", "YYYY-MM").daysInMonth() // 31 

एक-लाइनर प्रत्यक्ष गणना (कोई दिनांक वस्तु नहीं):

 function daysInMonth(m, y) {//m is 1-based, feb = 2 return 31 - (--m ^ 1? m % 7 & 1: y & 3? 3: y % 25? 2: y & 15? 3: 2); } console.log(daysInMonth(2, 1999)); // February in a non-leap year console.log(daysInMonth(2, 2000)); // February in a leap year 

यदि आप दिनांक ऑब्जेक्ट के वर्तमान महीने में दिनों की संख्या चाहते हैं, तो निम्न विधि पर विचार करें:

 Date.prototype.getNumberOfDaysInMonth = function(monthOffset) { if (monthOffset !== undefined) { return new Date(this.getFullYear(), this.getMonth()+monthOffset, 0).getDate(); } else { return new Date(this.getFullYear(), this.getMonth(), 0).getDate(); } } 

तो आप इसे इस तरह चला सकते हैं:

 var myDate = new Date(); myDate.getNumberOfDaysInMonth(); // Returns 28, 29, 30, 31, etc. as necessary myDate.getNumberOfDaysInMonth(); // BONUS: This also tells you the number of days in past/future months! 
 function numberOfDays(iMonth, iYear) { var myDate = new Date(iYear, iMonth + 1, 1); //find the fist day of next month var newDate = new Date(myDate - 1); //find the last day return newDate.getDate(); //return # of days in this month } 

लीप के वर्षों को ध्यान में रखते हुए:

 function (year, month) { var isLeapYear = ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0); return [31, (isLeapYear ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]; } 

एक पंक्ति में:

 // month is 1-12 function getDaysInMonth(year, month){ return month == 2 ? 28 + (year % 4 == 0 ? (year % 100 == 0 ? (year % 400 == 0 ? 1 : 0) : 1):0) : 31 - (month - 1) % 7 % 2; } 

शायद सबसे खूबसूरत समाधान नहीं, लेकिन समझना और बनाए रखने में आसान; और, यह लड़ाई-परीक्षण किया गया है।

 function daysInMonth(month, year) { var days; switch (month) { case 1: // Feb, our problem child var leapYear = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0); days = leapYear ? 29 : 28; break; case 3: case 5: case 8: case 10: days = 30; break; default: days = 31; } return days; },