﻿//檢核(検核)日期格式 YYYYMMDD or YYYY/MM/DD
function IsValidYYYYsMMsDD(strDateText)
{
	var aDaysInMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	var strDates,iMonth,iDay,iYear;
	if(strDateText.indexOf("/")>=0)
	{
		strDates=strDateText.split("/");
		if(strDates.length!=3) return false;
	}
	else
	{
		var nDateDigit = strDateText.length;
		if(nDateDigit<5) return false;
		strDates = new Array(strDateText.substr(0,nDateDigit-4),strDateText.substr(nDateDigit-4,2),strDateText.substr(nDateDigit-2,2));
	}
	iYear  = parseInt(strDates[0],10);
	if(isNaN(iYear)) return false;
	if(iYear<1753 || iYear>9999) return false; //check for SQL Server Datetime's Year range
	iMonth = parseInt(strDates[1],10);
	if(isNaN(iMonth)) return false;
	iDay = parseInt(strDates[2],10);
	if(isNaN(iDay)) return false;
	var iDaysInMonth=(iMonth!=2) ? aDaysInMonth[iMonth-1] : ((iYear%4==0 && iYear%100!=0 || iYear % 400==0)?29:28);
	if(!(iMonth<13 && iMonth>0 && iDay>0 && iDay<=iDaysInMonth)) return false;
	return true;
}
//CustomValidation function
function ValidateYYYYsMMsDD(source,argument)
{
	argument.IsValid = IsValidYYYYsMMsDD(argument.Value);
}

//Format Date-Text to YYYY/MM/DD
function FormatDateText(strDateText)
{
	if(!IsValidYYYYsMMsDD(strDateText))
	{
		return strDateText;				
	}
	var strDates,iMonth,iDay,iYear;
	if(strDateText.indexOf("/")>=0)
	{
		strDates=strDateText.split("/");
		if(strDates.length!=3) return strDates;
	}
	else
	{
		var nDateDigit = strDateText.length;
		if(nDateDigit<5) return false;
		strDates = new Array(strDateText.substr(0,nDateDigit-4),strDateText.substr(nDateDigit-4,2),strDateText.substr(nDateDigit-2,2));
	}
	var sYear  = String(parseInt(strDates[0],10));
	while(sYear.length<4) sYear = "0" + sYear;
	var sMonth = String(parseInt(strDates[1],10));
	while(sMonth.length<2) sMonth = "0" + sMonth;
	var sDay = String(parseInt(strDates[2],10));
	while(sDay.length<2) sDay = "0" + sDay;
	
	return sYear + "/" + sMonth + "/" + sDay;
}
