在项目中经常会使用到fullCalendar来获取日历信息,有时候需要按月取得当前显示月份的相关数据,那么我们就要获取当前月的第一天和最后一天,那怎么取得这两个日期?上代码:
1、直接遍历得到
/**
*获得当前月份的第一天和最后一天
*返回数组['2017-11-01','2017-11-30']
*记得把departure-schedule-content替换成你们自己的
**/
function GetFirstLastDate(){
var monthStart = "";
var monthEnd = "";
var MonthLength = $(".departure-schedule-content .fc-border-separate tbody tr.fc-week td.fc-day").not(".fc-other-month").length;
$(".departure-schedule-content .fc-border-separate tbody tr.fc-week td.fc-day").not(".fc-other-month").each(function(i){
if(i==0){
monthStart=$(this).attr("data-date").replace(/[-]/g,"/");
}
if(i==MonthLength-1){
monthEnd=$(this).attr("data-date").replace(/[-]/g,"/");
}
});
return [monthStart,monthEnd];
}
其实方法一最基本的思想就是去遍历当前月的所有日期,取第一个和最后一个元素即是第一天和最后一天的日期;
2、但其实有一种更好、更适用的方法,如下
//核心思路是通过下个月的第一天减去一天得到这个月的最后一天
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()方法
/*
author: meizz
对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") ==> 2006-07-02 08:09:04.423
(new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
**/
Date.prototype.Format = function(fmt){
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;
}