在项目中很多时候都要用到fullCalendar或者Calendar日期插件搭配一些事件完成一些功能,特别是翻页时很多时候要获取当前月的第一天和最后一天传参来取数据;所以需要一个获取某个月份的第一天和最后一天的方法;
之前写了一个方法是去遍历插件的所有天然后获取第一个和最后一个的日期就可以,这个思路确实可以解决问题,不过总感觉不太灵活;
所以翻查资料之后有了一个新思路,那就是通过下一个月的第一天减去一天则得到当前月的最后一天;具体方法如下:
function getMonthFirstLastDay(year,month){
var firstDay=new Date(year,month-1,1);//这个月的第一天
var currentMonth=firstDay.getMonth(); //取得月份数
var nextMonthFirstDay=new Date(firstDay.getFullYear(),currentMonth+1,1);//加1获取下个月第一天
var dis=nextMonthFirstDay.getTime()-24*60*60*1000;//减去一天就是这个月的最后一天
var lastDay=new Date(dis);
firstDay=firstDay.Format("yyyy/MM/dd");//格式化 //这个格式化方法要用你们自己的,也可以用本文已经贴出来的下面的Format
lastDay=lastDay.Format("yyyy/MM/dd");//格式化
return [firstDay,lastDay];
}
//看看这种写法会不会更好点
function getMonthFirstLastDay(year,month){
var firstDay=new Date(year,month-1,1);//这个月的第一天
var currentMonth=firstDay.getMonth(); //取得月份数
var lastDay=new Date(firstDay.getFullYear(),currentMonth+1,0);//是0而不是-1
firstDay=firstDay.Format("yyyy/MM/dd");//格式化
lastDay=lastDay.Format("yyyy/MM/dd");//格式化
return [firstDay,lastDay];
}
//例子1:
console.log(getMonthFirstLastDay(2018,01));
//输出结果是:
["2018/01/01", "2018/01/31"]
//例子2:
console.log(getMonthFirstLastDay(2018,13));
//输出结果是:
["2019/01/01","2019/01/31"]
//以上是我自己的写法,明白思路之后你也可以自己写,写法可以不同;
//日期格式化方法Format()方法</strong>
// 对Date的扩展,将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// 例子:
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2018-07-02 08:09:04.423
// (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2018-7-2 8:9:4.18
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
调用:
var time1 = new Date().Format("yyyy-MM-dd");
var time2 = new Date().Format("yyyy-MM-dd HH:mm:ss");