
-------------------------------------------------------------------------------------------------------------------------------
dateRangUtil.js
/**
* 日期范圍工具類
*/
var dateRangeUtil = (function () {
/***
* 獲得當前時間
*/
this.getCurrentDate = function () {
return new Date();
};
/***
* 獲得本周起止時間
*/
this.getCurrentWeek = function () {
//起止日期數組
var startStop = new Array();
//獲取當前時間
var currentDate = this.getCurrentDate();
//返回date是一周中的某一天
var week = currentDate.getDay();
//返回date是一個月中的某一天
var month = currentDate.getDate();
//一天的毫秒數
var millisecond = 1000 * 60 * 60 * 24;
//減去的天數
var minusDay = week != 0 ? week - 1 : 6;
//alert(minusDay);
//本周 周一
var monday = new Date(currentDate.getTime() - (minusDay * millisecond));
//本周 周日
var sunday = new Date(monday.getTime() + (6 * millisecond));
//添加本周時間
startStop.push(monday.format("yyyy-MM-dd")); //本周起始時間
//添加本周最后一天時間
startStop.push(sunday.format("yyyy-MM-dd")); //本周終止時間
//返回
return startStop;
};
/***
* 獲得本月的起止時間
*/
this.getCurrentMonth = function () {
//起止日期數組
var startStop = new Array();
//獲取當前時間
var currentDate = this.getCurrentDate();
//獲得當前月份0-11
var currentMonth = currentDate.getMonth();
//獲得當前年份4位年
var currentYear = currentDate.getFullYear();
//求出本月第一天
var firstDay = new Date(currentYear, currentMonth, 1);
//當為12月的時候年份需要加1
//月份需要更新為0 也就是下一年的第一個月
if (currentMonth == 11) {
currentYear++;
currentMonth = 0; //就為
} else {
//否則只是月份增加,以便求的下一月的第一天
currentMonth++;
}
//一天的毫秒數
var millisecond = 1000 * 60 * 60 * 24;
//下月的第一天
var nextMonthDayOne = new Date(currentYear, currentMonth, 1);
//求出上月的最后一天
var lastDay = new Date(nextMonthDayOne.getTime() - millisecond);
//添加至數組中返回
startStop.push(firstDay.format("yyyy-MM-dd"));
startStop.push(lastDay.format("yyyy-MM-dd"));
//返回
return startStop;
};
/**
* 得到本季度開始的月份
* @param month 需要計算的月份
***/
this.getQuarterSeasonStartMonth = function (month) {
var quarterMonthStart = 0;
var spring = 0; //春
var summer = 3; //夏
var fall = 6; //秋
var winter = 9; //冬
//月份從0-11
if (month < 3) {
return spring;
}
if (month < 6) {
return summer;
}
if (month < 9) {
return fall;
}
return winter;
};
/**
* 獲得該月的天數
* @param year年份
* @param month月份
* */
this.getMonthDays = function (year, month) {
//本月第一天 1-31
var relativeDate = new Date(year, month, 1);
//獲得當前月份0-11
var relativeMonth = relativeDate.getMonth();
//獲得當前年份4位年
var relativeYear = relativeDate.getFullYear();
//當為12月的時候年份需要加1
//月份需要更新為0 也就是下一年的第一個月
if (relativeMonth == 11) {
relativeYear++;
relativeMonth = 0;
} else {
//否則只是月份增加,以便求的下一月的第一天
relativeMonth++;
}
//一天的毫秒數
var millisecond = 1000 * 60 * 60 * 24;
//下月的第一天
var nextMonthDayOne = new Date(relativeYear, relativeMonth, 1);
//返回得到上月的最后一天,也就是本月總天數
return new Date(nextMonthDayOne.getTime() - millisecond).getDate();
};
/**
* 獲得本季度的起止日期
*/
this.getCurrentSeason = function () {
//起止日期數組
var startStop = new Array();
//獲取當前時間
var currentDate = this.getCurrentDate();
//獲得當前月份0-11
var currentMonth = currentDate.getMonth();
//獲得當前年份4位年
var currentYear = currentDate.getFullYear();
//獲得本季度開始月份
var quarterSeasonStartMonth = this.getQuarterSeasonStartMonth(currentMonth);
//獲得本季度結束月份
var quarterSeasonEndMonth = quarterSeasonStartMonth + 2;
//獲得本季度開始的日期
var quarterSeasonStartDate = new Date(currentYear, quarterSeasonStartMonth, 1);
//獲得本季度結束的日期
var quarterSeasonEndDate = new Date(currentYear, quarterSeasonEndMonth, this.getMonthDays(currentYear, quarterSeasonEndMonth));
//加入數組返回
startStop.push(quarterSeasonStartDate.format("yyyy-MM-dd"));
startStop.push(quarterSeasonEndDate.format("yyyy-MM-dd"));
//返回
return startStop;
};
/***
* 得到本年的起止日期
*
*/
this.getCurrentYear = function () {
//起止日期數組
var startStop = new Array();
//獲取當前時間
var currentDate = this.getCurrentDate();
//獲得當前年份4位年
var currentYear = currentDate.getFullYear();
//本年第一天
var currentYearFirstDate = new Date(currentYear, 0, 1);
//本年最后一天
var currentYearLastDate = new Date(currentYear, 11, 31);
//添加至數組
startStop.push(currentYearFirstDate.format("yyyy-MM-dd"));
startStop.push(currentYearLastDate.format("yyyy-MM-dd"));
//返回
return startStop;
};
/**
* 返回上一個月的第一天Date類型
* @param year 年
* @param month 月
**/
this.getPriorMonthFirstDay = function (year, month) {
//年份為0代表,是本年的第一月,所以不能減
if (month == 0) {
month = 11; //月份為上年的最后月份
year--; //年份減1
return new Date(year, month, 1);
}
//否則,只減去月份
month--;
return new Date(year, month, 1); ;
};
/**
* 獲得上一月的起止日期
* ***/
this.getPreviousMonth = function () {
//起止日期數組
var startStop = new Array();
//獲取當前時間
var currentDate = this.getCurrentDate();
//獲得當前月份0-11
var currentMonth = currentDate.getMonth();
//獲得當前年份4位年
var currentYear = currentDate.getFullYear();
//獲得上一個月的第一天
var priorMonthFirstDay = this.getPriorMonthFirstDay(currentYear, currentMonth);
//獲得上一月的最后一天
var priorMonthLastDay = new Date(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth(), this.getMonthDays(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth()));
//添加至數組
startStop.push(priorMonthFirstDay.format("yyyy-MM-dd"));
startStop.push(priorMonthLastDay.format("yyyy-MM-dd"));
//返回
return startStop;
};
/**
* 獲得上一周的起止日期
* **/
this.getPreviousWeek = function () {
//起止日期數組
var startStop = new Array();
//獲取當前時間
var currentDate = this.getCurrentDate();
//返回date是一周中的某一天
var week = currentDate.getDay();
//返回date是一個月中的某一天
var month = currentDate.getDate();
//一天的毫秒數
var millisecond = 1000 * 60 * 60 * 24;
//減去的天數
var minusDay = week != 0 ? week - 1 : 6;
//獲得當前周的第一天
var currentWeekDayOne = new Date(currentDate.getTime() - (millisecond * minusDay));
//上周最后一天即本周開始的前一天
var priorWeekLastDay = new Date(currentWeekDayOne.getTime() - millisecond);
//上周的第一天
var priorWeekFirstDay = new Date(priorWeekLastDay.getTime() - (millisecond * 6));
//添加至數組
startStop.push(priorWeekFirstDay.format("yyyy-MM-dd"));
startStop.push(priorWeekLastDay.format("yyyy-MM-dd"));
return startStop;
};
/**
* 得到上季度的起始日期
* year 這個年應該是運算后得到的當前本季度的年份
* month 這個應該是運算后得到的當前季度的開始月份
* */
this.getPriorSeasonFirstDay = function (year, month) {
var quarterMonthStart = 0;
var spring = 0; //春
var summer = 3; //夏
var fall = 6; //秋
var winter = 9; //冬
//月份從0-11
switch (month) {//季度的其實月份
case spring:
//如果是第一季度則應該到去年的冬季
year--;
month = winter;
break;
case summer:
month = spring;
break;
case fall:
month = summer;
break;
case winter:
month = fall;
break;
};
return new Date(year, month, 1);
};
/**
* 得到上季度的起止日期
* **/
this.getPreviousSeason = function () {
//起止日期數組
var startStop = new Array();
//獲取當前時間
var currentDate = this.getCurrentDate();
//獲得當前月份0-11
var currentMonth = currentDate.getMonth();
//獲得當前年份4位年
var currentYear = currentDate.getFullYear();
//上季度的第一天
var priorSeasonFirstDay = this.getPriorSeasonFirstDay(currentYear, currentMonth);
//上季度的最后一天
var priorSeasonLastDay = new Date(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2, this.getMonthDays(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2));
//添加至數組
startStop.push(priorSeasonFirstDay.format("yyyy-MM-dd"));
startStop.push(priorSeasonLastDay.format("yyyy-MM-dd"));
return startStop;
};
/**
* 得到去年的起止日期
* **/
this.getPreviousYear = function () {
//起止日期數組
var startStop = new Array();
//獲取當前時間
var currentDate = this.getCurrentDate();
//獲得當前年份4位年
var currentYear = currentDate.getFullYear();
currentYear--;
var priorYearFirstDay = new Date(currentYear, 0, 1);
var priorYearLastDay = new Date(currentYear, 11, 1);
//添加至數組
startStop.push(priorYearFirstDay.format("yyyy-MM-dd"));
startStop.push(priorYearLastDay.format("yyyy-MM-dd"));
return startStop;
};
return this;
})();
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;
}
調用方法:
// 周
if(self.time == 1){
self.startTime = dateRangeUtil.getCurrentWeek()[0];
self.endTime = dateRangeUtil.getCurrentWeek()[1];
}
// 月
if(self.time == 2){
self.startTime = dateRangeUtil.getCurrentMonth()[0];
self.endTime = dateRangeUtil.getCurrentMonth()[1];
}
// 季度
if(self.time == 3){
self.startTime = dateRangeUtil.getCurrentSeason()[0];
self.endTime = dateRangeUtil.getCurrentSeason()[1];
}
// 年
if(self.time == 4){
self.startTime = dateRangeUtil.getCurrentYear()[0];
self.endTime = dateRangeUtil.getCurrentYear()[1];
}
console.log('startTime:'+self.startTime)
console.log('endTime:'+self.endTime)
