| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 |
- /**
- * @author herong
- * 日期组件
- */
- var CFWDate = _FW.fCreateClass();
- /**
- * 日期组件API
- */
- CFWDate.prototype = {
-
- /**
- * 初始化
- * */
- fInitialize : function(options) {
-
- },
- /**
- * 获取应用服务器时间
- * 主要是根据传入的日期格式,获取应用服务器当前时间
- * @param String sFormate 日期的格式 参见开发手册“获取数据库服务器指定格式的当前日期时间”
- * @return String 日期格式传入空时,返回默认格式 yyyy-mm-dd
- * <pre>
- * 使用举例:
- * var _sFormate = "yyyy年mm月dd日 hh时mm分ss秒sss毫秒";
- * CFW.oDate.fnGetAppSerDate(_sFormate);
- * </pre>
- */
- 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
- * <pre>
- * 使用举例:
- * var _aNy = CFW.oDate.fnAddMmonths("201201",2);
- * </pre>
- */
- 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
- * <pre>
- * 使用举例:
- * var _aDate = CFW.oDate.fnAddDays("2012-01-01",20);
- * </pre>
- */
- 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 相差月数
- * <pre>
- * 使用举例:
- * var _aYs = CFW.oDate.fnMonthsBetween("201201","201202");
- * </pre>
- */
- 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 间隔天数
- * <pre>
- * 使用举例:
- * var _aDays = CFW.oDate.fnDaysBetween("2012-01-10","2012-01-30");
- * </pre>
- */
- 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 转换后的日期字符串
- * <pre>
- * 使用举例:
- * var _aDate = CFW.oDate.fnFormateDateStr("20120110","YYYYMMDD","YYYY-MM-DD");
- * </pre>
- */
- 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
- * <pre>
- * 使用举例:
- * var _aResult = CFW.oDate.fnCompareDate("20120110","20120110","日期比较失败");
- * </pre>
- */
- 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
- * <pre>
- * 使用举例:
- * var _aResult = CFW.oDate.fnCompareDate2(aform.test,"20120110","20120110","日期比较失败");
- * </pre>
- */
- 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;
- }
- };
|