js获取一个月前,一周前时间。
/**
* 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;
}