/**
* Calendar
*/
var _date_cal = null;
function showCalendar(elementName) {
if (_date_cal == null) {
_date_cal = new Epoch('_date_cal','popup', document.getElementById(elementName));
}
var element = elementName;
if (typeof elementName == "string") {
element = document.getElementById(elementName);
}
_date_cal.setTarget(element);
_date_cal.show();
}
function setToday(elementId){
var today = new Date();
var year = today.getFullYear();
var month = today.getMonth()+1;
if (month < 10){
month = "0"+month;
}
var day = today.getDate();
if (day < 10){
day = "0"+day;
}
var formatedDate = year+""+month+""+day;
document.getElementById(elementId).value = formatedDate;
}
function checkDate(date){
if(date!=""){
if(isNaN(date)|| date.length!=8){
return true;
}
}
return false;
}
function checkHour(hour){
if(hour!=""){
if(isNaN(hour) || hour > 23|| hour < 0){
return true;
}
}
return false;
}
function checkMin(min){
if(min!=""){
if(isNaN(min)|| min > 59|| min < 0){
return true;
}
}
return false;
}
/************* 日期檢查 *************
1.日期字串格式必須為 yyyymmdd.
2.必須搭配 isLeap() 來判斷閏年.
*************************************/
function dateValidate(dateStr)
{
if(dateStr<0 || isNaN(dateStr) || (dateStr.length != 8))
{
alert("日期格式錯誤, 請用yyyymmdd");
return false;
}
var leap = 28;
if (isLeap(parseInt(dateStr.substring(0,4))))
leap = 29;
var mtmp = parseInt(dateStr.substring(4,6));
if (dateStr.substring(4,6) == '08')
mtmp = 8;
if (dateStr.substring(4,6) == '09')
mtmp = 9;
if (mtmp < 1 || mtmp > 12)
{
alert("月錯誤");
return false;
}
var dayInMonth = new Array(12);
dayInMonth[1] = 31;
dayInMonth[2] = leap;
dayInMonth[3] = 31;
dayInMonth[4] = 30;
dayInMonth[5] = 31;
dayInMonth[6] = 30;
dayInMonth[7] = 31;
dayInMonth[8] = 31;
dayInMonth[9] = 30;
dayInMonth[10] = 31;
dayInMonth[11] = 30;
dayInMonth[12] = 31;
var dtmp = parseInt(dateStr.substring(6));
if (dateStr.substring(6) == '08')
dtmp = 8;
if (dateStr.substring(6) == '09')
dtmp = 9;
if(dtmp < 1 || dtmp > dayInMonth[mtmp])
{
alert("日錯誤");
return false;
}
return true;
}
function dateValidate(dateStr,fieldMsg)
{
if(fieldMsg == 'undefined' || fieldMsg == null){
fieldMsg ="輸入日期";
}
if(dateStr<0 || isNaN(dateStr) || (dateStr.length != 8))
{
alert(fieldMsg+":日期格式錯誤, 請用yyyymmdd");
return false;
}
var leap = 28;
if (isLeap(parseInt(dateStr.substring(0,4))))
leap = 29;
var mtmp = parseInt(dateStr.substring(4,6))
if (dateStr.substring(4,6) == '08')
mtmp = 8;
if (dateStr.substring(4,6) == '09')
mtmp = 9;
if (mtmp < 1 || mtmp > 12)
{
alert(fieldMsg+":日期[月份格式]錯誤, 請用01~12月錯誤");
return false;
}
var dayInMonth = new Array(12);
dayInMonth[1] = 31;
dayInMonth[2] = leap;
dayInMonth[3] = 31;
dayInMonth[4] = 30;
dayInMonth[5] = 31;
dayInMonth[6] = 30;
dayInMonth[7] = 31;
dayInMonth[8] = 31;
dayInMonth[9] = 30;
dayInMonth[10] = 31;
dayInMonth[11] = 30;
dayInMonth[12] = 31;
var dtmp = parseInt(dateStr.substring(6));
if (dateStr.substring(6) == '08')
dtmp = 8;
if (dateStr.substring(6) == '09')
dtmp = 9;
if(dtmp < 1 || dtmp > dayInMonth[mtmp])
{
alert(fieldMsg+":日期[日格式]錯誤, 請用01~31日錯誤");
return false;
}
return true;
}
function dateValidateMsg(dateStr,fieldMsg)
{
if(fieldMsg == 'undefined' || fieldMsg == null){
fieldMsg ="輸入日期";
}
if(dateStr<0 || isNaN(dateStr) || (dateStr.length != 8))
{
//return (fieldMsg+":日期格式錯誤, 請用yyyymmdd");
return (fieldMsg+"日期格式錯誤, 請用yyyymmdd");
}
var leap = 28;
if (isLeap(parseInt(dateStr.substring(0,4))))
leap = 29;
var mtmp = parseInt(dateStr.substring(4,6))
if (dateStr.substring(4,6) == '08')
mtmp = 8;
if (dateStr.substring(4,6) == '09')
mtmp = 9;
if (mtmp < 1 || mtmp > 12)
{
//return (fieldMsg+":日期[月份格式]錯誤, 請用01~12月錯誤");
return (fieldMsg+"日期[月份格式]錯誤, 請用01~12月錯誤");
}
var dayInMonth = new Array(12);
dayInMonth[1] = 31;
dayInMonth[2] = leap;
dayInMonth[3] = 31;
dayInMonth[4] = 30;
dayInMonth[5] = 31;
dayInMonth[6] = 30;
dayInMonth[7] = 31;
dayInMonth[8] = 31;
dayInMonth[9] = 30;
dayInMonth[10] = 31;
dayInMonth[11] = 30;
dayInMonth[12] = 31;
var dtmp = parseInt(dateStr.substring(6));
if (dateStr.substring(6) == '08')
dtmp = 8;
if (dateStr.substring(6) == '09')
dtmp = 9;
if(dtmp < 1 || dtmp > dayInMonth[mtmp])
{
//return (fieldMsg+":日期[日格式]錯誤, 請用01~31日錯誤");
return (fieldMsg+"日期[日格式]錯誤, 請用01~31日錯誤");
}
return;
}
/************* 閏年判斷 **************/
function isLeap (Year)
{
if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0))
return true;
else
return false;
}
/************* 字串轉日期 *************
1.日期字串格式必須為 yyyymmdd.
2.必須搭配 dateValidate(), isLeap() 來先判斷日期是否正確.
*************************************/
function str2Date(str)
{
if(dateValidate(str))
{
var yyyy = str.substring(0, 4);
var mm = str.substring(4, 6)-1;
var dd = str.substring(6, 8);
return new Date(yyyy, mm, dd);
}
else
{
return false;
}
}
/************* 日期轉字串 *************
1.傳入的日期格式必須為 Date.
2.產生的日期字串格式為 yyyymmdd.
*************************************/
function date2Str(date)
{
var yyyy = date.getFullYear();
var mm = date.getMonth()+1;
if (mm < 10)
mm = "0"+mm;
var dd = date.getDate();
if (dd < 10)
dd = "0"+dd;
return yyyy+""+mm+""+dd;
}
/************* 加減月份 *************
1.必須搭配 dateValidate(), isLeap(), date2Str 來先判斷日期是否正確.
2.日期字串格式必須為 yyyymmdd.
3.產生的日期字串格式為 yyyymmdd.
*************************************/
function addMonth(baseDateStr, addedMonthNum)
{
if(dateValidate(baseDateStr))
{
var yyyy = baseDateStr.substring(0, 4);
var mm = baseDateStr.substring(4, 6)-1-(-addedMonthNum);
var dd = baseDateStr.substring(6, 8);
var addedMonthDate = new Date(yyyy, mm, dd);
return date2Str(addedMonthDate);
}
else
{
return false;
}
}
/************* 加減天數 *************
1.必須搭配 dateValidate(), isLeap(), date2Str 來先判斷日期是否正確.
2.日期字串格式必須為 yyyymmdd.
3.產生的日期字串格式為 yyyymmdd.
*************************************/
function addDay(baseDateStr, addedDayNum)
{
if(dateValidate(baseDateStr))
{
var yyyy = baseDateStr.substring(0, 4);
var mm = baseDateStr.substring(4, 6)-1;
var dd = baseDateStr.substring(6, 8)-(-addedDayNum);
var addedMonthDate = new Date(yyyy, mm, dd);
return date2Str(addedMonthDate);
}
else
{
return false;
}
}
/************* 兩個日期的差距(也可當做檢查起迄日期) *************
1.必須搭配 dateValidate(), isLeap(), str2Date 來先判斷日期是否正確.
2.日期字串格式必須為 yyyymmdd.
3.回傳的單位為"天"(dateStr2減dateStr1).
*************************************/
function daysDistance(dateStr1, dateStr2)
{
if(dateValidate(dateStr1) == false){
return false;
}
if(dateValidate(dateStr2) == false){
return false;
}
var date1 = Date.parse(str2Date(dateStr1));
var date2 = Date.parse(str2Date(dateStr2));
return Math.ceil((date2-date1)/(24*60*60*1000));
}
/************* 民國年的日期轉為西元年的日期(yyyymmdd) *************
1.日期字串格式必須為 yymmdd, (yy為民國年).
2.回傳的格式為yyyymmdd.
*************************************/
function twDate2Ad(dateStr)
{
var yy = dateStr.substring(0, 2)-(-1911);
var mm = dateStr.substring(2, 4);
var dd = dateStr.substring(6);
return yy+""+mm+""+dd;
}
/************* 西元年的日期(yyyymmdd)轉為民國年 *************
1.日期字串格式必須為 yyyymmdd.
2.回傳的格式為 yymmdd, (yy為民國年).
*************************************/
function ad2TwDate(dateStr)
{
var yyyy = dateStr.substring(0, 4)-1911;
var mm = dateStr.substring(4, 6);
var dd = dateStr.substring(6);
return yyyy+""+mm+""+dd;
}
/************* 日期區間檢查 *************
檢查兩個日期是否為有效區間
*************************************/
function isValidDateRange(date1, date2) {
if (parseInt(date2.substring(0,4)) < parseInt(date1.substring(0,4))){
alert(parseInt(date2.substring(0,4))+'<'+parseInt(date1.substring(0,4)));
return false;
}
else if (parseInt(date2.substring(4,6)) < parseInt(date1.substring(4,6))) {
alert(parseInt(date2.substring(4,6))+'<'+parseInt(date1.substring(4,6)));
return false;
}
else if (parseInt(date2.substring(6,8)) < parseInt(date1.substring(6,8))) {
alert(parseInt(date2.substring(6,8))+'<'+parseInt(date1.substring(6,8)));
return false;
}
return true;
}