最近写了一个calendar程序,遇到了很多问题,下面我列出一些个人认为很有意思,也值得思考的问题,供大家参考。
注:每一个问题我给出的方法也许不是最好的方法,若有更好的方法,希望大牛来补充完善。
问题一:给定一个日期,如何获取该月的总天数。
方法一:hack技巧
思路:
var date = new Date(2017,1,0);
变量date表示的是2017年2月第0天,也就是1月的最后一天31号,以此类推。
代码:
function getSumDay(date) { var day = new Date(date.getFullYear(), date.getMonth() + 1, 0); return day.getDate(); }
方法二:常规思路
思路:
从该月第一天开始+1,当日期的月份和该月不等时,记录增加的次数,这个数值就是该月的天数。
代码:
function getSumDay(date) { var dayNumber = 1; //初始化日号 var monthNumber = date.getMonth(); //月号 var sum = 0; //给新日期初始化 var newDate = new Date(date.setDate(1)); //只要月份相等,说明还在该月中,继续循环,直到下一个月 for (var newMonthNumber = newDate.getMonth(); newMonthNumber == monthNumber; ++dayNumber) { newDate = new Date(newDate.setDate(dayNumber)); newMonthNumber = newDate.getMonth(); ++sum; } return sum - 1; }
方法三:hack方法
思路:因为一个月没有第32天,而setDate(day)中如果传入的day大于该月的天数,那么会自动进入下一个月。
代码:
function getSumDay(year,month){ return 32-new Data(year,month,32).getData(); } alert(getSumDay(2017,2));