标签:
/**
 *  DK 命名空间  防止全局变量污染
 */
var DK = {} ;
/**
 * 获取前几个月,默认为一个月,当前时间
 * @author duke
 * @date 格式为yyyy-mm-dd的日期,如:2014-01-25
 */
DK.getPreMonth = function() {
	var obj = DK.init(arguments);
	var arr = obj.date.split(‘-‘);
	var year = parseInt(arr[0]); //获取当前日期的年份
	var month = parseInt(arr[1]); //获取当前日期的月份
	var day = parseInt(arr[2]); //获取当前日期的日
	//如果大于12个月,先算年
	if (obj.num >= 12) {
		year -= parseInt(obj.num / 12);
	}
	//年计算结束后,计算月,月如果是负数,年减1,月加12.
	month -= obj.num % 12;
	if (month <= 0) {
		year--;
		month += 12;
	}
	//获取该月组后一天,也就是天数。
	var lastDay = new Date(year, month, 0).getDate();
	if (day > lastDay) {
		day = lastDay;
	}
	return year + ‘-‘ + month + ‘-‘ + day;
}
/**
 * 获取前几天,默认为一天,当前时间
 */
DK.getPreDay = function() {
	var obj = DK.init(arguments);
	var arr = obj.date.split(‘-‘);
	var year = parseInt(arr[0]); //获取当前日期的年份
	var month = parseInt(arr[1]); //获取当前日期的月份
	var day = parseInt(arr[2]); //获取当前日期的日
	var dateTime = new Date(year, month-1, day).getTime() - obj.num * (24 * 60 * 60 * 1000);
	return DK.dateToStr(new Date(dateTime));
}
/**
 * 获取前几周,默认为一周,当前时间num,date
 */
DK.getPreWeek = function() {
	var obj = DK.init(arguments);
	return DK.getPreDay(7 * obj.num, obj.date);
}
/**
 * 日期类型转换为字符串类型,默认当前日期
 */
DK.dateToStr = function(date) {
	date = date || new Date();
	var year = date.getFullYear(); //获取当前日期的年份
	var month = date.getMonth() + 1; //获取当前日期的月份
	var day = date.getDate(); //获取当前日期的日
	return year + ‘-‘ + month + ‘-‘ + day;
}
/**
 * 格式化日期字符串
 */
DK.formatDateStr = function(date) {
	var arr = date.split(‘-‘);
	var month = parseInt(arr[1]); //获取当前日期的月份
	var day = parseInt(arr[2]); //获取当前日期的日
	//日月补0
	if (month < 10) {
		month = ‘0‘ + month;
	}
	if (day < 10) {
		day = ‘0‘ + day;
	}
	return year + ‘-‘ + month + ‘-‘ + day;
}
DK.init = function(arguments) {
	var obj = {
		num:1,
		date:(function(){
			return DK.dateToStr();
		})()
	}
	if (arguments.length === 1) {
		var arg = arguments[0];
		if (arg instanceof Date) {
			obj.date = DK.dateToStr(arg);
		} else if(typeof arg == ‘string‘) {
			obj.date = arg;
		} else if(typeof arg == ‘number‘) {
			obj.num = arg;
		} else {
			throw new Error(‘arg type error‘);
		}
	} else if(arguments.length === 2) {
		var arg1 = arguments[0], arg2 = arguments[1];
		if ((arg1 instanceof Date || typeof arg1 == ‘string‘) && typeof arg2 == ‘number‘) {
			if(typeof arg1 == ‘string‘){
				obj.date = arg1;
			}else{
				obj.date = DK.dateToStr(arg1);
			}
			obj.num = arg2;
		} else if((arg2 instanceof Date || typeof arg2 == ‘string‘) && typeof arg1 == ‘number‘) {
			if (typeof arg2 == ‘string‘) {
				obj.date = arg2;
			} else {
				obj.date = DK.dateToStr(arg2);
			}
			obj.num = arg1;
		} else {
			throw new Error(‘arguments type error‘);
		}
	} else if(arguments.length > 2) {
		throw new Error(‘too many arguments‘);
	}
	return obj;
}
 
//该js文件主要是现了,无论是几个参数(两个以内),无论是参数顺序,都可以获取以前的时间。
//主要是在默认值方面做了大量的改进,虽说存在许多的不必要,但是做基础框架不就是多做一点事情吗
//当然这里面肯定还有许多不足,大家一起交流。 
 
js获取几个月前,几周前时间。
标签:
原文地址:http://www.cnblogs.com/shalf/p/5118325.html