/** * @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;
}
};