代码改变世界

[转] Js获取 本周、本月、本季度、本年、上月、上周、上季度、去年时间段

2013-10-22 10:59  rockliuxn  阅读(861)  评论(0编辑  收藏  举报
/** * 针对时间的工具类 */
var DateTimeUtil = 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); //本周起始时间
		//添加本周最后一天时间
		startStop.push(sunday); //本周终止时间
		//返回
		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);
		startStop.push(lastDay);
		//返回
		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);
		startStop.push(quarterSeasonEndDate);
		//返回
		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);
		startStop.push(currentYearLastDate);
		//返回
		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);
		startStop.push(priorMonthLastDay);
		//返回
		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);
		startStop.push(priorWeekLastDay);
		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);
		startStop.push(priorSeasonLastDay);
		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);
		startStop.push(priorYearLastDay);
		return startStop;
	};
};