/*====================================
1、检查日期格式的有效性: YYYY-YY-YY function CheckDateFormat(tvalue)	适用于文本框
2、检查日期的有效性:			  function CheckDate(strYear,strMonth,strDay)	适用于下拉列表
3、检查日期输入框数据的正确性: function DaytxtBoxCheck(theText)	传入文本框对象
4、检查月份输入框数据的正确性  function MonthtxtBoxCheck(theText)	传入文本框对象
5、检查年份输入框数据的正确性  function YeartxtBoxCheck(theText)	传入文本框对象
6、比较日期上下限数据的正确性  function CompareDate(sYear,sMonth,sDay,tYear,tMonth,tDay)  用于日期比较
7、检查日期输入框数据的正确性: function DayCheck(theText) 传入值
8、检查月份输入框数据的正确性  function MonthCheck(theText) 传入值
9、检查年份输入框数据的正确性  function YearCheck(theText) 传入值
10、比较日期上下限数据的正确性  function CompareDate1(DateS1,DateS2)	'参数不同,传入两个日期值
11、将DateS转换为Date对象		function ToDateObj(DateS)
12、用DateS加上天数DiffDay获得新的日期，DiffDay可以为负数	function DateAdd(DateS,DiffDay)
13、获得DateS1,DateS2之间的间隔天数		function DiffDay(DateS1,DateS2)
======================================*/





/*====================================
1.检查日期格式的有效性,适用于文本框
======================================*/
function CheckDateFormat(tvalue)
{
  var checkOK = "0123456789-";
  var checkStr = tvalue;
  var allValid = true;
  var decPoints = 0;
  var allNum = "";
  if (checkStr.length==0)
  {
	alert("请输入日期信息！");
	return false;
  }
  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
    if (ch == "-")
    {
      allNum += "-";
      decPoints++;
    }
    else
      allNum += ch;
  }
  if (!allValid)
  {
    alert("在日期信息中，只能输入数字和-。");
    return (false);
  }
//  alert(decPoints);
  if(decPoints!=2)
  {
    alert("请输入正确的日期信息，格式YYYY-YY-YY。");
    return (false);
  }
	var tmpV=checkStr.split("-");
	if (CheckDate(tmpV[0],tmpV[1],tmpV[2])==false)
	{
	return (false);
	}
	return true;	
}



/*====================================
2.检查日期的有效性，返回逻辑性值,适用于下拉列表
=====================================*/
function CheckDate(strYear,strMonth,strDay)
{
	var tmpDay = strDay;
	var tmpYear =strYear;
	var tmpMonth = strMonth;
	if (DayCheck(tmpDay)==false)
	{
	return false;
	}
	if (MonthCheck(tmpMonth)==false)
	{
	return false;
	}
	if (YearCheck(tmpYear)==false)
	{
	return false;
	}

	var tmpDay = parseInt(strDay,10);
	var tmpYear =parseInt(strYear,10);
	var tmpMonth = parseInt(strMonth,10);

	if (tmpDay > 28)   //日期>28进行日期检查
		if (tmpMonth == 2)  //对二月进行判断
		{
			if (tmpDay > 29)   //二月日期>29
			{	alert('二月日期大于29天？');
				return false;
			}
			var MyResult = tmpYear % 4;
			var MyResult1 = tmpYear % 100;
			var MyResult2 = tmpYear % 400;
			
			if ((MyResult != 0) && (MyResult1 != 0) && (tmpDay == 29))
			//不被4整除，不被100整除  最大日期为28天
			{	alert('该年为平年！');
				return false;
			}
			
			//可被400整除，日期为29天
			if ((MyResult1 == 0) && (MyResult2 != 0) && (tmpDay == 29))
			//不可被400整除，可被100整除，日期为28天
			{	alert('该年为平年！');
				return false;
			}
			
		}	

		else  //对其他月进行判断
			if ((tmpDay == 31) && ((tmpMonth == 4) || (tmpMonth == 6) || (tmpMonth == 9) || (tmpMonth == 11)))
			 //日期为31日，月份为小月
			{	alert('当前月为小月！');
				return false;
			}
	return true	;
}



/*====================================
3.检查日期输入框数据的正确性
=====================================*/
function DaytxtBoxCheck(theText)
{

  if (theText.value == "")
  {
    alert("请在日期信息中输入值。");
    theText.focus();
 	theText.select();
    
    return (false);
  }

  if (theText.value.length < 1)
  {
    alert("在日期信息中，请至少输入 1 个字符。");
    theText.focus();
 	theText.select();
    return (false);
  }

  if (theText.value.length > 2)
  {
    alert("在日期信息中，请最多输入 2 个字符。");
    theText.focus();
 	theText.select();
    return (false);
  }

  var checkOK = "0123456789";
  var checkStr = theText.value;
  var allValid = true;
  var decPoints = 0;
  var allNum = "";
  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
    allNum += ch;
  }
  if (!allValid)
  {
    alert("在日期信息中，只能输入数字型数据。");
    theText.focus();
 	theText.select();
    return (false);
  }

  var chkVal = allNum;
  var prsVal = parseInt(allNum,10);
  if (chkVal != "" && !(prsVal >= "1" && prsVal <= "31"))
  {
    alert("请在日期信息中输入值 大于或等于 1 与 小于或等于 31。");
    theText.focus();
 	theText.select();
    return (false);
  }
  return (true);
}


/*====================================
4.检查月份输入框数据的正确性
=====================================*/
function MonthtxtBoxCheck(theText)
{

  if (theText.value == "")
  {
    alert("请在月份信息中输入值。");
    theText.focus();
 	theText.select();
    return (false);
  }

  if (theText.value.length < 1)
  {
    alert("在月份信息中，请至少输入1个字符。");
    theText.focus();
 	theText.select();
    return (false);
  }

  if (theText.value.length > 2)
  {
    alert("在月份信息中，请最多输入 2 个字符。");
    theText.focus();
 	theText.select();
    return (false);
  }

  var checkOK = "0123456789";
  var checkStr = theText.value;
  var allValid = true;
  var decPoints = 0;
  var allNum = "";
  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
    if (ch != ",")
      allNum += ch;
  }
  if (!allValid)
  {
    alert("在月份信息中，只能输入数字型数据。");
    theText.focus();
 	theText.select();
    return (false);
  }

  var chkVal = allNum;
  var prsVal = parseInt(allNum,10);
  if (chkVal != "" && !(prsVal >= "1" && prsVal <= "12"))
  {
    alert("请在月份信息中输入值 大于或等于 1 与 小于或等于 12。");
    theText.focus();
 	theText.select();
    return (false);
  }
  return (true);
}

/*====================================
5.检查年份输入框数据的正确性
=====================================*/
function YeartxtBoxCheck(theText)
{

  if (theText.value == "")
  {
    alert("请在年份信息中输入值。");
    theText.focus();
 	theText.select();
    return (false);
  }

  if (theText.value.length < 4)
  {
    alert("在年份信息中，请至少输入4个字符。");
    theText.focus();
 	theText.select();
    return (false);
  }

  if (theText.value.length > 4)
  {
    alert("在年份信息域中，请最多输入4个字符。");
    theText.focus();
 	theText.select();
    return (false);
  }

  var checkOK = "0123456789";
  var checkStr = theText.value;
  var allValid = true;
  var decPoints = 0;
  var allNum = "";
  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
    if (ch == ",")
    {
      allNum += ".";
      decPoints++;
    }
    else
      allNum += ch;
  }
  if (!allValid)
  {
    alert("在年份信息中，只能输入数字型数据。");
    theText.focus();
 	theText.select();
    return (false);
  }

  if (decPoints > 1)
  {
    alert("请在年份信息中输入一个有效数字。");
    theText.focus();
 	theText.select();
    return (false);
  }

  var chkVal = allNum;
  var prsVal = parseFloat(allNum);
  if (chkVal != "" && !(prsVal <= "2100" && prsVal >= "1900"))
  {
    alert("请在年份信息中输入值小于或等于2100与大于或等于1900。");
    theText.focus();
 	theText.select();
    return (false);
  }
  return (true);
}


/*====================================
6.比较日期上下限数据的正确性
=====================================*/
function CompareDate(sYear,sMonth,sDay,tYear,tMonth,tDay)
{
	//日期的有效性，返回逻辑性值
	if (CheckDate(sYear,sMonth,sDay)==false)
	return false;
	
	if (CheckDate(tYear,tMonth,tDay)==false)
	return false;

	//整理时间
	if (sMonth.length==1)  
	sMonth="0"+sMonth;

	if (sDay.length==1)  
	sDay="0"+sDay;

	if (tMonth.length==1)  
	tMonth="0"+tMonth;

	if (tDay.length==1)  
	tDay="0"+tDay;
	
	var fromStr,toStr;
	fromStr=sYear+sMonth+sDay;
	toStr=tYear+tMonth+tDay;
	
	if (fromStr>toStr)
	{
		alert('下限时间应该小于上限时间！');
		return false;
	}
	return true	
}


/*====================================
7.检查日子输入框数据的正确性
=====================================*/
function DayCheck(theText)
{
  if (theText == "")
  {
    alert("请在日期信息中输入值。");
    return (false);
  }
  if (theText.length != 2)
  {
    alert("在日期信息中，请输入 2 个字符。");
    return (false);
  }
  var checkOK = "0123456789";
  var checkStr = theText;
  var allValid = true;
  var decPoints = 0;
  var allNum = "";
  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
    allNum += ch;
  }
  if (!allValid)
  {
    alert("在日期信息中，只能输入数字型数据。");
    return (false);
  }

  var chkVal = allNum;
  var prsVal = parseInt(allNum,10);
  if (chkVal != "" && !(prsVal >= "1" && prsVal <= "31"))
  {
    alert("请在日期信息中输入值 大于或等于 1 与 小于或等于 31。");
    return (false);
  }
  return (true);
}


/*====================================
8.检查月份输入框数据的正确性
=====================================*/
function MonthCheck(theText)
{

  if (theText == "")
  {
    alert("请在月份信息中输入值。");
    return (false);
  }

  if (theText.length != 2)
  {
    alert("在月份信息中，请输入2个字符。");
    return (false);
  }


  var checkOK = "0123456789";
  var checkStr = theText;
  var allValid = true;
  var decPoints = 0;
  var allNum = "";
  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
    if (ch != ",")
      allNum += ch;
  }
  if (!allValid)
  {
    alert("在月份信息中，只能输入数字型数据。");
    return (false);
  }

  var chkVal = allNum;
  var prsVal = parseInt(allNum,10);
  //alert(prsVal);
  if (chkVal != "" && !(prsVal >= "1" && prsVal <= "12"))
  {
    alert("请在月份信息中输入值 大于或等于 1 与 小于或等于 12。");
    return (false);
  }
  return (true);
}



/*====================================
9.检查年份输入框数据的正确性
=====================================*/
function YearCheck(theText)
{

  if (theText == "")
  {
    alert("请在年份信息中输入值。");
    return (false);
  }

  if (theText.length != 4)
  {
    alert("在年份信息中，请输入4个字符。");
    return (false);
  }

  var checkOK = "0123456789";
  var checkStr = theText;
  var allValid = true;
  var decPoints = 0;
  var allNum = "";
  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
    if (ch == ",")
    {
      allNum += ".";
      decPoints++;
    }
    else
      allNum += ch;
  }
  if (!allValid)
  {
    alert("在年份信息中，只能输入数字型数据。");
    return (false);
  }

  if (decPoints > 1)
  {
    alert("请在年份信息中输入一个有效数字。");
    return (false);
  }

  var chkVal = allNum;
  var prsVal = parseFloat(allNum);
  if (chkVal != "" && !(prsVal <= "2100" && prsVal >= "1900"))
  {
    alert("请在年份信息中输入值小于或等于2100与大于或等于1900。");
    return (false);
  }
  return (true);
}


/*=========================================
10.日期比较
DateS1>DateS2 返回-1
DateS1=DateS2 返回0
DateS1<DateS2 返回1
DateS1或DateS2不合法返回false
===========================================*/
function CompareDate1(DateS1,DateS2)
{
 var Date1=ToDateObj(DateS1);
 var Date2=ToDateObj(DateS2);
 if(Date1.getYear()>Date2.getYear())
  return -1;
 if(Date1.getYear()<Date2.getYear())
  return 1;
 if(Date1.getMonth()>Date2.getMonth())
  return -1;
 if(Date1.getMonth()<Date2.getMonth())
  return 1;  
 if(Date1.getDate()>Date2.getDate())
  return -1;
 if(Date1.getDate()<Date2.getDate())
  return 1;
 return 0;
}

 
/*====================================
11.将DateS转换为Date对象
======================================*/
function ToDateObj(DateS)
{
 var DateStr=new Array();
 DateStr=split(DateS,"-");
 var Date1=new Date(eval(DateStr[0]),eval(DateStr[1]),eval(DateStr[2]));
 if(Date1.getMonth()>0)
  Date1.setMonth(Date1.getMonth()-1);
 return Date1;
}
 

/*====================================
12.用DateS加上天数DiffDay获得新的日期，
DiffDay可以为负数
======================================*/
function DateAdd(DateS,DiffDay)
{
 var DateStr=new Array();
 var MonthDay=new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
 DateStr=split(DateS,"-");
 var newDay=eval(DateStr[2]);
 var newMonth=eval(DateStr[1]);
 var newYear=eval(DateStr[0]);
 if(newYear%400==0 || newYear%4==0 && newYear%100!=0)
  MonthDay[2]=29;
 else
  MonthDay[2]=28;
 if(DiffDay==0)
  return DateS;
 if(DiffDay<0)
 {
  DiffDay=0-DiffDay;
  newDay=newDay-DiffDay;
  while(newDay<=0)
  {
   newMonth=newMonth-1;
   if(newMonth<1)
   {
    newYear=newYear-1;
    newMonth=12;
    if(newYear%400==0 || newYear%4==0 && newYear%100!=0)
     MonthDay[2]=29;
    else
     MonthDay[2]=28;
   }
   newDay=MonthDay[newMonth]+newDay;
  }
 }
 else if(DiffDay>0)
 {
  newDay=newDay+DiffDay;
  while(newDay>MonthDay[newMonth])
  {
   newDay=newDay-MonthDay[newMonth];
   newMonth=newMonth+1;
   if(newMonth>12)
   {
    newYear=newYear+1;
    newMonth=1;
    if(newYear%400==0 || newYear%4==0 && newYear%100!=0)
     MonthDay[2]=29;
    else
     MonthDay[2]=28;
   }
  }
 }
 if(newMonth<10) newMonth="0"+newMonth;
 if(newDay<10) newDay="0"+newDay;
 return newYear+"-"+newMonth+"-"+newDay;
}
 
/*====================================
13.获得DateS1,DateS2之间的间隔天数
======================================*/
function DiffDay(DateS1,DateS2)
{
 var newDay1;
 var newMonth1;
 var newYear1;
 var newDay2;
 var newMonth2;
 var newYear2;
 var DiffDay=0;
 var DateStr=new Array();
 var MonthDay=new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
 if(CompareDate(DateS1,DateS2)==0)
  return 0;
 if(CompareDate(DateS1,DateS2)==-1)
 {
  DateStr=split(DateS2,"-");
  newDay1=eval(DateStr[2])
  newMonth1=eval(DateStr[1])
  newYear1=eval(DateStr[0])
  DateStr=split(DateS1,"-");
  newDay2=eval(DateStr[2])
  newMonth2=eval(DateStr[1])
  newYear2=eval(DateStr[0])
 }
 if(CompareDate(DateS1,DateS2)==1)
 {
  DateStr=split(DateS1,"-");
  newDay1=eval(DateStr[2])
  newMonth1=eval(DateStr[1])
  newYear1=eval(DateStr[0])
  DateStr=split(DateS2,"-");
  newDay2=eval(DateStr[2])
  newMonth2=eval(DateStr[1])
  newYear2=eval(DateStr[0])
 }
 if(newYear1%400==0 || newYear1%4==0 && newYear1%100!=0)
  MonthDay[2]=29;
 else
  MonthDay[2]=28;
 while(newYear1!=newYear2 || newMonth1!=newMonth2 || newDay1!=newDay2)
 {
  newDay1=newDay1+1;
  DiffDay=DiffDay+1;
  if(newDay1>MonthDay[newMonth1])
  {
   newDay1=1
   newMonth1=newMonth1+1;
   if(newMonth1>12)
   {
    newMonth=1;
    newYear=newYear+1;
    if(newYear1%400==0 || newYear1%4==0 && newYear1%100!=0)
     MonthDay[2]=29;
    else
     MonthDay[2]=28;
   }
  }
 }
 return DiffDay;
}




