使用JavaScript确定一个月内的天数的最佳方法是什么?

使用JavaScript确定一个月内的天数的最佳方法是什么?

我一直在使用这个功能,但我想知道什么是最有效和最准确的方法。

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


喵喔喔
浏览 527回答 3
3回答

慕哥6287543

如果经常调用此函数,则缓存该值以获得更好的性能可能很有用。这是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。虽然javascript&nbsp;Date object在1970年1月1日的两边都覆盖了大约285616年(100,000,000天),但我厌倦了不同浏览器中的各种意外日期不一致(最明显的是0到99年)。我也很好奇如何计算它。所以我写了一个简单的,最重要的,小算法来计算正确的(Proleptic&nbsp;Gregorian&nbsp;/ Astronomical / ISO 8601:2004(第4.3.2.1节),所以年份0存在并且是闰年,支持负年份)天数为给定的月份和年份。它使用短路位掩码 - 模数leapYear算法(略微修改为js)和常见的mod-&nbsp;8月算法。请注意,在AD/BC表示法中,第0年AD / BC不存在:相反年份1 BC是闰年!如果您需要考虑BC符号,那么只需减去一年(否则为正)年值!(或者将年份减去1进一步的年度计算。)function daysInMonth(m, y){&nbsp; 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="&nbsp; for( var r='', i=0, y=+this.value&nbsp; &nbsp; &nbsp;; 12>i++&nbsp; &nbsp; &nbsp;; r+= 'Month: ' + i + ' has ' + daysInMonth(i, y) + ' days<br>'&nbsp; &nbsp; &nbsp;);&nbsp; this.nextSibling.innerHTML=r;" /><div></div>注意,月份必须是1个!注意,这是一个不同的算法,然后我在我的Javascript中使用的幻数查找计算一年中的日期(1 - 366)答案,因为这里闰年的额外分支仅在2月需要。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript