为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

喵喔喔 2019-08-02 13:49:29
使用JavaScript确定一个月内的天数的最佳方法是什么?我一直在使用这个功能,但我想知道什么是最有效和最准确的方法。function daysInMonth(iMonth, iYear) {    return 32 - new Date(iYear, iMonth, 32).getDate();}
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

如果经常调用此函数,则缓存该值以获得更好的性能可能很有用。

这是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();
    }})();


查看完整回答
反对 回复 2019-08-02
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

一些答案(也在其他问题上)有闰年问题或使用Date-object。虽然javascript Date object在1970年1月1日的两边都覆盖了大约285616年(100,000,000天),但我厌倦了不同浏览器中的各种意外日期不一致(最明显的是0到99年)。我也很好奇如何计算它。

所以我写了一个简单的,最重要的,算法来计算正确的Proleptic Gregorian / Astronomical / ISO 8601:2004(第4.3.2.1节),所以年份0存在并且是闰年,支持负年份)天数为给定的月份和年份。
它使用短路位掩码 - 模数leapYear算法(略微修改为js)和常见的mod- 8月算法

请注意,在AD/BC表示法中,第0年AD / BC不存在:相反年份1 BC是闰年!
如果您需要考虑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个!

注意,这是一个不同的算法,然后我在我的Javascript中使用的幻数查找计算一年中的日期(1 - 366)答案,因为这里闰年的额外分支仅在2月需要。


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 526 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号