/** * @author herong * 日期组件 */ var CFWDate = _FW.fCreateClass(); /** * 日期组件API */ CFWDate.prototype = { /** * 初始化 * */ fInitialize : function(options) { }, /** * 获取应用服务器时间 * 主要是根据传入的日期格式,获取应用服务器当前时间 * @param String sFormate 日期的格式 参见开发手册“获取数据库服务器指定格式的当前日期时间” * @return String 日期格式传入空时,返回默认格式 yyyy-mm-dd *
    * 使用举例:
    *     var _sFormate = "yyyy年mm月dd日 hh时mm分ss秒sss毫秒";
    *     CFW.oDate.fnGetAppSerDate(_sFormate);
    * 
*/ fnGetAppSerDate : function (sFormate) { var str = ""; $.ajax({ url:contextPath + '/jsp/framework/sysdate.jsp' ,data:{FORMATE:sFormate} ,cache:false ,type:'post' ,async:false ,error:function (request, textStatus, errorThrown){CFW.oWin.fnAlert("获取系统时间出错!");} ,success:function (data, textStatus){str = jQuery.trim(data); } }); return str; }, /** * 计算月份指定累加或减少月数后的月份 * @param String sDate (必需) 初始年月 YYYYMM * @param int iMonths (必需) 增加或减少的数量(增加为正数,减少为负数) * @return String 格式为YYYYMM *
    * 使用举例:
    *     var _aNy = CFW.oDate.fnAddMmonths("201201",2);
    * 
*/ fnAddMmonths : function (sDate,iMonths) { if(!CFW.oValid.fnIsNY(sDate)){ return sDate; } if(!CFW.oValid.fnIsInteger(iMonths)){ return sDate; } var iY = parseInt(sDate.substring(0,4),10); var iM = parseInt(sDate.substring(4,6),10); var mdate = new Date(iY, iM - 1, 1);//年月日,月从0开始,因此需减一 var num = parseInt(iMonths+"",10); //***增减月数 mdate.setMonth(mdate.getMonth() + num); //如果月份长度少于2,则前加 0 补位 if((mdate.getMonth() + 1).toString().length == 1) { mth = 0 + "" + (mdate.getMonth() + 1).toString(); } else { mth = (mdate.getMonth() + 1).toString(); } var str = mdate.getFullYear() + "" + mth; return str; }, /** * 计算间隔天数后的日期 * @param String sDate (必需) 日期字符串 格式为yyyy-mm-dd * @param int iDays (必需) 间隔的天数 * @return String 格式为yyyy-mm-dd *
    * 使用举例:
    *     var _aDate = CFW.oDate.fnAddDays("2012-01-01",20);
    * 
*/ fnAddDays : function (sDate,iDays) { if(!CFW.oValid.fnIsDate(sDate,"yyyy-mm-dd")){ return ; } if(!CFW.oValid.fnIsInteger(iDays)){ return ; } var dateString; var arry = sDate.split("-"); var iY = parseInt(arry[0],10); var iM = parseInt(arry[1],10); var iD = parseInt(arry[2],10); var mdate = new Date(iY, iM - 1, iD); var num = parseInt(iDays,10); //***增减天数 mdate.setDate(mdate.getDate()+num); //如果月份长度少于2,则前加 0 补位 if((mdate.getMonth() + 1).toString().length == 1) { monthString = 0 + "" + (mdate.getMonth() + 1).toString(); } else { monthString = (mdate.getMonth() + 1).toString(); } //如果天数长度少于2,则前加 0 补位 if (mdate.getDate().toString().length == 1) { dayString = 0 + "" + mdate.getDate().toString(); } else { dayString = mdate.getDate().toString(); } dateString = mdate.getFullYear() + "-" + monthString + "-" + dayString; return dateString; }, /** * 计算两个年月之间的相差月数 * @param String sDateBegin (必需) 开始年月 字符串 格式为YYYYMM * @param String sDateEnd (必需) 结束年月 字符串 格式为YYYYMM * @return int 相差月数 *
    * 使用举例:
    *     var _aYs = CFW.oDate.fnMonthsBetween("201201","201202");
    * 
*/ fnMonthsBetween : function (sDateBegin,sDateEnd) { var strOut; if(!CFW.oValid.fnIsNY(sDateBegin)){ return 0; } if(!CFW.oValid.fnIsNY(sDateEnd)){ return 0; } var iB = parseInt(sDateBegin.substring(0,4),10)* 12 + parseInt(sDateBegin.substring(4, 6),10); var iE = parseInt(sDateEnd.substring(0, 4),10) * 12 + parseInt(sDateEnd.substring(4, 6),10); strOut = iE - iB; return strOut; }, /** * 计算两个日期间隔的天数 * @param String sBeginDate (必需) 开始日期 字符串 格式 yyyy-mm-dd * @param String sEndDate (必需) 结束日期 字符串 格式 yyyy-mm-dd * @return int 间隔天数 *
    * 使用举例:
    *     var _aDays = CFW.oDate.fnDaysBetween("2012-01-10","2012-01-30");
    * 
*/ fnDaysBetween : function (sBeginDate,sEndDate) { if(!CFW.oValid.fnIsDate(sBeginDate,"yyyy-mm-dd")){ return 0; } if(!CFW.oValid.fnIsDate(sEndDate,"yyyy-mm-dd")){ return 0; } //将两个日期用数组方式转为日期格式 var arryB = sBeginDate.split("-"); var arryE = sEndDate.split("-"); var iY = parseInt(arryB[0],10); var iM = parseInt(arryB[1],10); var iD = parseInt(arryB[2],10); var dateB = new Date(iY, iM - 1, iD); iY = parseInt(arryE[0],10); iM = parseInt(arryE[1],10); iD = parseInt(arryE[2],10); var dateE = new Date(iY, iM - 1, iD); //将两个日期想减得差值 var iDay = (dateE - dateB )/(1000*60*60*24); return iDay; }, /** * 日期格式转换 * 主要是将传入的日期字符串,从当前的日期格式转换成新的日期格式 * @param String sDateStr (必需) 日期字符串 * @param String sCurFormat (必需) 当前的日期格式(日期的格式支持 yyyymmdd、yyyy-mm-dd、yyyy/mm/dd) * @param String sNewFormat (必需) 转换后的日期格式(日期的格式支持 yyyymmdd、yyyy-mm-dd、yyyy/mm/dd) * @return String 转换后的日期字符串 *
    * 使用举例:
    *     var _aDate = CFW.oDate.fnFormateDateStr("20120110","YYYYMMDD","YYYY-MM-DD");
    * 
*/ fnFormateDateStr : function (sDateStr,sCurFormat,sNewFormat) { var sYear =""; var sMm =""; var sDd =""; var sDate=""; if(sCurFormat.toLowerCase().match(/yyyy[-\/]?mm[-\/]?dd/)==null) { CFW.oWin.fnAlert(sCurFormat+' 原格式不正确!'); return ""; } if(sNewFormat.toLowerCase().match(/yyyy[-\/]?mm[-\/]?dd/)==null) { CFW.oWin.fnAlert(sNewFormat+' 替换格式不正确!'); return ""; } if(sDateStr.match(/\d{4}[-\/]?\d{2}[-\/]?\d{2}/)==null) { CFW.oWin.fnAlert(sDateStr+' 录入日期字符串与其格式不匹配!'); return ""; } var ft_1 = sCurFormat.toLowerCase(); var ft_2 = sNewFormat.toLowerCase(); var iY=0,iM=0,iD=0; iY = ft_1.indexOf('yyyy'); iM = ft_1.indexOf('mm'); iD = ft_1.indexOf('dd'); sYear = sDateStr.substr(iY,4); sMm = sDateStr.substr(iM,2); sDd = sDateStr.substr(iD,2); sDate = ft_2.replace(/yyyy/gi,sYear); sDate = sDate.replace(/mm/gi,sMm); sDate = sDate.replace(/dd/gi,sDd); return sDate; }, /** * 日期比较函数 * 判断如果sDate1大于sDate2就给出sMsg提示 * @param String sDate1 (必需) 开始日期(日期的格式支持 yyyymmdd、yyyy-mm-dd、yyyy/mm/dd) * @param String sDate2 (必需) 终止日期(日期的格式支持 yyyymmdd、yyyy-mm-dd、yyyy/mm/dd) * @param String sMsg (必需) 自定义的提示信息 * @return boolean 比较结果 true:sDate1小于或等于sDate2,false:sDate1大于sDate2 *
    * 使用举例:
    *     var _aResult = CFW.oDate.fnCompareDate("20120110","20120110","日期比较失败");
    * 
*/ fnCompareDate : function (sDate1,sDate2,sMsg) { var sYear =''; var sMonth = ''; var sDay = ''; var sDate_1 = ''; var sDate_2 = ''; var arry; var s = ''; var i = 0,iDate1 = 0,iDate2 = 0; var b1 = false; var b2 = false; if(CFW.oValid.fnIsDate(sDate1,"yyyymmdd")||CFW.oValid.fnIsDate(sDate1,"yyyy-mm-dd")||CFW.oValid.fnIsDate(sDate1,"yyyy/mm/dd")){ b1 = true; } if(CFW.oValid.fnIsDate(sDate2,"yyyymmdd")||CFW.oValid.fnIsDate(sDate2,"yyyy-mm-dd")||CFW.oValid.fnIsDate(sDate2,"yyyy/mm/dd")){ b2 = true; } if(!b1){ CFW.oWin.fnAlert(sDate1 + ' 日期不正确!'); return false; } if(!b2){ CFW.oWin.fnAlert(sDate2+' 日期不正确!'); return false; } i = sDate1.indexOf('-'); if(i > 0){ s = "-"; } i = sDate1.indexOf('/'); if(i > 0){ s = "/"; } if(s == ''){ sDate_1 = sDate1; }else{ arry = sDate1.split(s); sYear = arry[0]; sMonth = arry[1]; sDay = arry[2]; sDate_1 = sYear + sMonth + sDay; } s = ""; i = sDate2.indexOf('-'); if(i > 0){ s = "-"; } i = sDate2.indexOf('/'); if(i > 0){ s = "/"; } if(s == ''){ sDate_2 = sDate2; }else{ arry = sDate2.split(s); sYear = arry[0]; sMonth = arry[1]; sDay = arry[2]; sDate_2 = sYear + sMonth + sDay; } iDate1 = parseInt(sDate_1,10); iDate2 = parseInt(sDate_2,10); //如果参数1大于参数2,弹出消息 if(iDate1 <= iDate2){ return true; }else{ //如果传入消息,则弹出提示 if(!(sMsg==null||sMsg==""||sMsg.length==0)){ CFW.oWin.fnAlert(sMsg); } return false; } }, /** * 日期比较函数 (fnCompareDate2) * 主要是判断如果sDate1大于sDate2就给出sMsg提示,并光标自动定位到oName控件上 * @param oName 录入控件 (必需) * @param String sDate1 (必需) 开始日期(日期的格式支持 yyyymmdd、yyyy-mm-dd、yyyy/mm/dd) * @param String sDate2 (必需) 终止日期(日期的格式支持 yyyymmdd、yyyy-mm-dd、yyyy/mm/dd) * @param String sMsg (必需) 自定义的提示信息 * @return boolean 比较结果 true:sDate1小于或等于sDate2,false:sDate1大于sDate2 *
    * 使用举例:
    *     var _aResult = CFW.oDate.fnCompareDate2(aform.test,"20120110","20120110","日期比较失败");
    * 
*/ fnCompareDate2 : function (oName,sDate1,sDate2,sMsg) { var b = this.fnCompareDate(sDate1,sDate2,sMsg); var inp = $(oName); if(!b){ setTimeout(function(){inp.focus();},0); } return b; } };