// 日期操作 封装一些日期常用操作var dateUtil = {/*** [getDetail 获取一个日期的详细信息]* @param {[type]} date [必传 日期对象|时间戳|日期格式]* @return {[type]} [日期相关信息]*/getDetail: function (date) {var _date = null;if (date instanceof Date) {// 传进来的为日期对象_date = date;} else if (typeof date === 'string') {// 日期格式_date = new Date(this.switchConnectSign(date, 0));} else if (typeof date == 'number') {// 时间戳_date = new Date(date);} else {_date = new Date();}// 日期信息对象var dateInfo = {};// 本地当前时间var now = new Date();var date0;var diff;// 星期 数组var weekDayArr = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];// 设置日期的起点时间date0 = new Date(_date.getFullYear(), _date.getMonth(), _date.getDate());now = new Date(now.getFullYear(), now.getMonth(), now.getDate());diff = date0.getTime() - now.getTime();if (diff == 0) {dateInfo.day1 = '今天';} else if (diff == 86400000) {dateInfo.day1 = '明天';} else if (diff == 172800000) {dateInfo.day1 = '后天';}dateInfo.weekday = weekDayArr[_date.getDay()];dateInfo.year = _date.getFullYear();dateInfo.month = _date.getMonth() + 1;dateInfo.day = _date.getDate();dateInfo.hour = _date.getHours();dateInfo.minute = _date.getMinutes();dateInfo.second = _date.getSeconds();return dateInfo;},/*** [formatNum 格式化数字 将小于10以下的数字前面加0]* @param {[type]} num [必传 数字]* @return {[type]} [数字]*/formatNum: function (num) {if (num < 10) {return '0' + num;}return num;},// 格式化日期 转成你想要的格式 例如: dateUtil.format(new Date(), 'Y-M-D H:F:S') => yyyy-mm-dd hh:ff:ss/*** [format 格式化日期 转成你想要的格式 例如: dateUtil.format(new Date(), 'Y-M-D H:F:S') => yyyy-mm-dd hh:ff:ss]* @param {[type]} date [必传 date对象|时间戳字符串|毫秒数]* @param {[type]} formatStr [非必传 想要的格式 有设置默认日期格式]* @return {[type]} [想要的格式]*/format: function (date, formatStr) {var d;date = date || new Date();if (date instanceof Date) {// 传入Date对象d = date;} else if (typeof date === 'string') {// 日期格式d = new Date(this.switchConnectSign(date, 0));} else if (typeof date === 'number') {// 时间戳d = new Date(date);}if (!formatStr) {// 未传入格式formatStr = 'Y-M-D H:F:S';}var self = this;return formatStr.replace(/Y|y|M|m|D|d|H|h|F|f|S|s/g, function (v) {switch (v) {case 'y':// yyyy => yyreturn (d.getFullYear() + '').slice(2);case 'Y':// yyyyreturn d.getFullYear();case 'm':// mreturn d.getMonth() + 1;case 'M':// mmreturn self.formatNum(d.getMonth() + 1);case 'd':// dreturn date.getDate();case 'D':// ddreturn self.formatNum(d.getDate());case "h":// hreturn d.getHours();case "H":// hhreturn self.formatNum(d.getHours());case "f":// freturn d.getMinutes();case "F":// ffreturn self.formatNum(d.getMinutes());case "s":// sreturn d.getSeconds();case "S":// ssreturn self.formatNum(d.getSeconds());}});},/*** [addTime 增加时间]* @param {[type]} date [必传 日期对象|时间戳|日期格式]* @param {[type]} type [必传 增加时间的格式 例如: 1D 1天 | 2H 2小时]* @param {[type]} formatStr [非必传 可以设置为想要的格式]* @return {[type]} [日期对象|想要的日期格式]*/addTime: function (date, type, formatStr) {var d = date || new Date();if (typeof d === 'string') {// 日期格式d = new Date(this.switchConnectSign(d, 0));} else if (typeof d === 'number') {// 时间戳d = new Date(d);} else if (!type || type.search(/Y|M|D|H|F|S/g) < 0) {return;}// 毫秒数var msec;// 数值var val = type.split(/Y|M|D|H|F|S/g)[0];// 单位var unit = type.substr(-1, 1);switch (unit) {case 'M'://x月msec = val * 30 * 24 * 60 * 60 * 1000;break;case 'D':// x天msec = val * 24 * 60 * 60 * 1000;break;case "H":// x小时msec = val * 60 * 60 * 1000;break;case "F":// x分钟msec = val * 60 * 1000;break;case "S":// x秒msec = val * 1000;break;}d.setTime(d.getTime() + msec);if (formatStr) {// 需要更改格式return this.format(d, formatStr);} else {// 直接返回日期对象 自行处理return d;}},/*** [switchConnectSign 切换日期连接符 IOS只支持yyyy/mm/dd格式 不支持中划线]* @param {[type]} date [必传 日期 yyyy/mm/dd | yyyy-mm-dd]* @param {[type]} type [必传 转换类型 - => / | / => -]* @return {[type]} [新的日期格式]*/switchConnectSign: function (date, type) {if (type == 0) {return date.replace('T', ' ').replace(/-/g, '/');} else if (type == 1) {return date.replace(/T/, ' ').replace(/\//g, '-');}},/*** [compare 比较两个日期大小]* @param {[type]} date1 [必传 日期 | 日期格式字符串 | 时间戳]* @param {[type]} date2 [必传 日期 | 日期格式字符串 | 时间戳]* @return {[type]} [数字 -1 前面小于后面 | 0 前面等于后面 | 1 前面大于后面]*/compare: function (date1, date2) {var timestamp1;var timestamp2;if (date1 instanceof Date) {// 日期timestamp1 = date1.getTime();} else if (typeof date1 === 'string') {// 日期格式timestamp1 = new Date(this.switchConnectSign(date1, 0)).getTime();} else if (typeof date1 === 'number') {// 时间戳timestamp1 = date1;} else {return;}if (date2 instanceof Date) {// 日期date2 = date2.getTime();} else if (typeof date2 === 'string') {// 日期格式timestamp2 = new Date(this.switchConnectSign(date2, 0)).getTime();} else if (typeof date2 === 'number') {// 时间戳timestamp2 = date2;} else {return;}if (timestamp1 < timestamp2) {return -1;} else if (timestamp1 > timestamp2) {return 1;} else {return 0;}}};