/** * 日期工具类 */ define(function(require, exports, module) { var constants = require("constants"); // 常量类 /** * 描述: 把日期格式字符串转换成js Date类型 * * @param dateStr: 日期字符串 格式必须为 yyyy-MM-dd hh:mm:ss 或 yyyy-MM-dd hh:mm:ss.S * @returns 返回JS日期对象 */ function getDateByStr(dateStr){ if (!dateStr) { return; } //去掉后面毫秒数 if (dateStr.indexOf(".") != -1) { dateStr = dateStr.substring(0, dateStr.indexOf(".")); } // 形如20160101120101转换成2016-01-01 12:01:01 if ($.trim(dateStr).length == 14 && dateStr.indexOf("-") == -1) { dateStr = dateStr.replace(/(d{4})(d{2})(d{2})(d{2})(d{2})(d{2})/, '$1-$2-$3 $4:$5:$6'); } // 形如20160101转换成2016-01-01 if ($.trim(dateStr).length == 8 && dateStr.indexOf("-") == -1) { dateStr = dateStr.replace(/(d{4})(d{2})(d{2})/, '$1-$2-$3 00:00:00'); } dateStr = dateStr.replace(new RegExp("-", "gm"), "/"); return new Date(dateStr); } /** * 描述:把yyyy-MM-dd hh:mm:ss (.S)日期字符串转化为指定格式的日期字符串 * * @author * @param srcDate: 1、源日期为日期格式的字符串 如:2015-11-12 11:34:45 * 2、源日期为Date类型 如:new Date(); * @param fmt: 格式,如:yyyy-MM-dd */ function dateFormat(srcDate, fmt){ if (!srcDate || !fmt) { return srcDate; } // 把字符串转换成日期对象 var date = (typeof(srcDate) == "object") ? srcDate : getDateByStr(srcDate); // 非date类型时返回原字符串 if (isNaN(date.getDay())) { return srcDate; } var o = { "M+" : date.getMonth() + 1, // 月份 "d+" : date.getDate(), // 日 "h+" : date.getHours(), // 小时 "m+" : date.getMinutes(), // 分 "s+" : date.getSeconds(), // 秒 "q+" : Math.floor((date.getMonth() + 3) / 3), // 季度 "S" : date.getMilliseconds() // 毫秒 }; // 年份比较特殊,单独处理 if (/(y+)/.test(fmt)){ fmt = fmt.replace(RegExp.$1, (date.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; } /** * 描述: 获取时间毫秒数 * * @author * @param date: 格式为yyyy-MM-dd hh:mm:ss 或 yyyy-MM-dd hh:mm:ss.S的时间字符串 * @returns 返回时间毫秒数 */ function getDateTime(date){ if (!date) { return 0; } //去掉后面毫秒数 if (date.indexOf(".") != -1) { date = date.substring(0, date.indexOf(".")); } date = date.replace(new RegExp("-", "gm"), "/"); return (new Date(date)).getTime(); } /** * 描述:根据年份和月份计算出有多少天 * @author * @param year: 年份 * @param month: 月份 * @returns 天数 */ function getMonthDays(year, month){ var monthStartDate = new Date(year, month - 1, 1); var monthEndDate = new Date(year, month, 1); return (monthEndDate - monthStartDate)/(1000 * 60 * 60 * 24); } /** * 计算某日期为一周中的哪天 */ function cweekday(wday) { var hzWeek= new Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六","星期日"); return hzWeek[wday]; } /** * 获取当前时间前后N天日期的方法 * 可以得到昨天,今天,明天,一月前,三月前,半年前,一年前的日期, * 只要修改参数就可以实现得到任何一个天数 * 昨天:getDateStr(-1) * 今天:getDateStr(0) * 明天:getDateStr(1) * * formate==> 1:yyyyMMdd * 2:yyyy-MM-dd */ function getDateStr(addDayCount, formate){ var dd = new Date(); dd.setDate(dd.getDate() + addDayCount); //获取addDayCount天后的日期 var y = dd.getFullYear(); var m = (dd.getMonth() + 1) < 10 ? "0" + (dd.getMonth() + 1) : (dd.getMonth() + 1);//获取当前月份的日期,不足10补0 var d = dd.getDate() < 10 ? "0" + dd.getDate() : dd.getDate(); //获取当前几号,不足10补0 if(1 == formate){ return y + m + d; //格式:yyyyMMdd }else if(2 == formate){ return y + "-" + m + "-" + d; } } function cala(date) { var y = date.substring(0,4);//年份 var m = date.substring(5,7);//月份 var d = date.substring(8,10);//日期 var next = 0; var cash_time; var ttt=new Date(y,m-1,d).getTime()+next * 24000 * 3600; var theday=new Date(); theday.setTime(ttt); var weekday = cweekday(theday.getDay()); return weekday; } /** *获取当前时间和日期 *@param srcDate: 1、源日期为日期格式的字符串 如:2015-11-12 11:34:45 * 2、源日期为Date类型 如:new Date(); */ function getNowDate(fmt){ var nowDate=new Date(); if(fmt==1){ return dateFormat(nowDate, "2015-11-12 11:34:45"); }else{ return dateFormat(nowDate,"yyyy-MM-dd"); } } var dateUtils = { "dateFormat" : dateFormat, // 根据格式显示日期 "getMonthDays" : getMonthDays, //根据年份和月份计算出有多少天 "getDateTime" : getDateTime, //获取时间毫秒数 "cala" : cala //根据日期计算该日为一周中的某天 }; //暴露对外的接口 module.exports = dateUtils; });