博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript 中 Date 细节问题导致的程序 Bug
阅读量:5877 次
发布时间:2019-06-19

本文共 895 字,大约阅读时间需要 2 分钟。

hot3.png

作者: Angus.Fenying

日期: 2016-09-05 11:20 AM

今天遇到一个 Bug,是在逢 31 号当天,日历控件(同事开发的)就会出问题。 表现为凡是有 31 号的月份几乎都不显示 31 号,但是部分月份如 12 月和 7 月除外。

检查代码发现出错的位置在于

//返回某月天数function getDaysBayYearAndMonth(year, month) {    var date = new Date();    date.setFullYear(year);    date.setMonth(month);    date.setDate(0);    return date.getDate();}

把系统时间设置为 8 月 31 号,重启浏览器,因为是当天发现的。 从这个函数体开始单步调试,依次检查,发现结果如下:

/** * 调用函数 getDaysBayYearAndMonth(2016, 8) */function getDaysBayYearAndMonth(year, month) {    var date = new Date(); // 2016-08-31    date.setFullYear(year); // 2016-08-31    date.setMonth(month);  // 2016-10-01    date.setDate(0); // 2016-09-30    return date.getDate(); // 30}

找到问题的关键所在了,因为 setMonth 修改了月份为 9 月,而 9 月没有 31 号,遂自动进位到 10 月 1 日。 然后再设置 setDate(0) 使得返回上个月最后一天,变成了 9 月 30 日。

那 12 月和 7 月为什么没有问题呢?因为 7 月的下一个月是 8 月,而 12 月的下一个月是 1 月,1 月和 8 月都是有 31 号的。

问题遂解。

转载于:https://my.oschina.net/fenying/blog/744116

你可能感兴趣的文章
zabbix监控部署
查看>>
struts中的xwork源码下载地址
查看>>
Android硬件抽象层(HAL)深入剖析(二)
查看>>
CDays–4 习题一至四及相关内容解析。
查看>>
L3.十一.匿名函数和map方法
查看>>
java面向对象高级分层实例_实体类
查看>>
android aapt 用法 -- ApkReader
查看>>
[翻译]用 Puppet 搭建易管理的服务器基础架构(3)
查看>>
Android -- AudioPlayer
查看>>
Python大数据依赖包安装
查看>>
Android View.onMeasure方法的理解
查看>>
Node.js 爬虫初探
查看>>
ABP理论学习之仓储
查看>>
NestJS 脑图
查看>>
我的友情链接
查看>>
Html body的滚动条禁止与启用
查看>>
Tengine新增nginx upstream模块的使用
查看>>
多媒体工具Mediainfo
查看>>
1-小程序
查看>>
CentOS图形界面和命令行切换
查看>>