﻿// JScript 文件
/*
JavaScript日期時間腳本庫
Creater:jason
Date:2007/03/10

1.	日期時間腳本庫方法列表   
2.	Date.prototype.isLeapYear 判斷閏年   
3.	Date.prototype.Format <SPAN class=hilite2>日期格式</SPAN>化   
4.	Date.prototype.DateAdd 日期計算   
5.	Date.prototype.DateDiff 比較日期差   
6.	Date.prototype.toString 日期轉字串   
7.	Date.prototype.toArray 日期分割為陣列   
8.	Date.prototype.DatePart 取日期的部分資訊   
9.	Date.prototype.MaxDayOfDate 取日期所在月的最大天數   
10.	Date.prototype.WeekNumOfYear 判斷日期所在年的第幾周   
11.	StringToDate 字串轉日期型   
12.	IsValidDate 驗證日期有效性   
13.	CheckDateTime 完整日期時間檢查   
14.	daysBetween 日期天數差    

*/

  
	//---------------------------------------------------    
	// 判斷閏年    
	//---------------------------------------------------    
	Date.prototype.isLeapYear = function()       
	{       
	return (0==this.getYear()%4&&((this.getYear()%100!=0)||(this.getYear()%400==0)));       
	}       
	  
	//---------------------------------------------------    
	// <SPAN class=hilite2>日期格式</SPAN>化    
	// 格式 YYYY/yyyy/YY/yy 表示年份    
	// MM/M 月份    
	// W/w 星期    
	// dd/DD/d/D 日期    
	// hh/HH/h/H 時間    
	// mm/m 分鐘    
	// ss/SS/s/S 秒    
	//---------------------------------------------------    
	Date.prototype.Format = function(formatStr)       
	{       
	var str = formatStr;       
	var Week = ['日','一','二','三','四','五','六'];      
	  
	     str=str.replace(/yyyy|YYYY/,this.getFullYear());       
	     str=str.replace(/yy|YY/,(this.getYear() % 100)>9?(this.getYear() % 100).toString():'0' + (this.getYear() % 100));       
	  
	     str=str.replace(/MM/,this.getMonth()>9?this.getMonth().toString():'0' + this.getMonth());       
         str=str.replace(/M/g,this.getMonth());       
	   
         str=str.replace(/w|W/g,Week[this.getDay()]);       
	  
         str=str.replace(/dd|DD/,this.getDate()>9?this.getDate().toString():'0' + this.getDate());       
	     str=str.replace(/d|D/g,this.getDate());       
	  
	     str=str.replace(/hh|HH/,this.getHours()>9?this.getHours().toString():'0' + this.getHours());       
	     str=str.replace(/h|H/g,this.getHours());       
         str=str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():'0' + this.getMinutes());       
	     str=str.replace(/m/g,this.getMinutes());       
	  
	     str=str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():'0' + this.getSeconds());       
	     str=str.replace(/s|S/g,this.getSeconds());       
	  
	return str;       
	}       
	  
	//+---------------------------------------------------    
	//| 求兩個時間的天數差 <SPAN class=hilite2>日期格式</SPAN>為 YYYY-MM-dd    
	//+---------------------------------------------------    
	function daysBetween(DateOne,DateTwo)      
	{       
	var OneMonth = DateOne.substring(5,DateOne.lastIndexOf ('-'));      
	var OneDay = DateOne.substring(DateOne.length,DateOne.lastIndexOf ('-')+1);      
	var OneYear = DateOne.substring(0,DateOne.indexOf ('-'));      
	  
	var TwoMonth = DateTwo.substring(5,DateTwo.lastIndexOf ('-'));      
	var TwoDay = DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ('-')+1);      
	var TwoYear = DateTwo.substring(0,DateTwo.indexOf ('-'));      
	  
	var cha=((Date.parse(OneMonth+'/'+OneDay+'/'+OneYear)- Date.parse(TwoMonth+'/'+TwoDay+'/'+TwoYear))/86400000);       
	return Math.abs(cha);      
	}      
	  
	  
	//+---------------------------------------------------    
	//| 日期計算    
	//+---------------------------------------------------    
	Date.prototype.DateAdd = function(strInterval, Number) {       
	var dtTmp = this;      
	switch (strInterval) {       
	case 's' :return new Date(Date.parse(dtTmp) + (1000 * Number));      
	case 'n' :return new Date(Date.parse(dtTmp) + (60000 * Number));      
	case 'h' :return new Date(Date.parse(dtTmp) + (3600000 * Number));      
	case 'd' :return new Date(Date.parse(dtTmp) + (86400000 * Number));      
	case 'w' :return new Date(Date.parse(dtTmp) + ((86400000 * 7) * Number));      
	case 'q' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number*3, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());      
	case 'm' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());      
	case 'y' :return new Date((dtTmp.getFullYear() + Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());      
	     }      
	}      
	  
	//+---------------------------------------------------    
	//| 比較日期差 dtEnd 格式為日期型或者 有效<SPAN class=hilite2>日期格式</SPAN>字串    
	//+---------------------------------------------------    
	Date.prototype.DateDiff = function(strInterval, dtEnd) {       
	var dtStart = this;      
	if (typeof dtEnd == 'string' )//如果是字串轉換為日期型    
	     {       
	         dtEnd = StringToDate(dtEnd);      
	     }      
	switch (strInterval) {       
	case 's' :return parseInt((dtEnd - dtStart) / 1000);      
	case 'n' :return parseInt((dtEnd - dtStart) / 60000);      
	case 'h' :return parseInt((dtEnd - dtStart) / 3600000);      
	case 'd' :return parseInt((dtEnd - dtStart) / 86400000);      
	case 'w' :return parseInt((dtEnd - dtStart) / (86400000 * 7));      
	case 'm' :return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1);      
	case 'y' :return dtEnd.getFullYear() - dtStart.getFullYear();      
	     }      
	}      
	  
	//+---------------------------------------------------    
	//| 日期輸出字串，重載了系統的toString方法    
	//+---------------------------------------------------    
	Date.prototype.toString = function(showWeek)      
	{       
	var myDate= this;      
	var str = myDate.toLocaleDateString();      
	//if (showWeek)      
	//     {       
	//var Week = ['日','一','二','三','四','五','六'];      
	 //        str += ' 星期' + Week[myDate.getDay()];      
	//     }      
	return str;      
	}    
	
	//+---------------------------------------------------    
	//| 获取民国日期
	//  如 民國 99 年 2 月 3 日 星期三
	//+---------------------------------------------------    
	function GetMgDate(dt)
	{
	  var result="民國 ";
	  var cyear=dt.getFullYear();
	  if(cyear==1911)
	    result+="元";
	  else
	    result+=(cyear-1911);
	  //alert(result);
	  //result+="年";
	  return dt.toString(true).replace(cyear,result).replace('星期',' 星期');
	  
	}
	
	
	
	//+---------------------------------------------------    
	//| 获取当前日期家历
	//  如 丙戌年六月初二
	//+---------------------------------------------------    
	function GetLy()
	{
	    var bsYear; 
        var bsDate; 
        var bsWeek; 
        var arrLen=8; //數組長度
        var sValue=0; //當年的秒數
        var dayiy=0; //當年第幾天
        var miy=0; //月份的下標
        var iyear=0; //年份標記
        var dayim=0; //當月第幾天
        var spd=86400; //每天的秒數

        var year1999="30;29;29;30;29;29;30;29;30;30;30;29"; //354
        var year2000="30;30;29;29;30;29;29;30;29;30;30;29"; //354
        var year2001="30;30;29;30;29;30;29;29;30;29;30;29;30"; //384
        var year2002="30;30;29;30;29;30;29;29;30;29;30;29"; //354
        var year2003="30;30;29;30;30;29;30;29;29;30;29;30"; //355
        var year2004="29;30;29;30;30;29;30;29;30;29;30;29;30"; //384
        var year2005="29;30;29;30;29;30;30;29;30;29;30;29"; //354
        var year2006="30;29;30;29;30;30;29;29;30;30;29;29;30";
    

        var month1999="正月;二月;三月;四月;五月;六月;七月;八月;九月;十月;十一月;十二月"
        var month2001="正月;二月;三月;四月;閏四月;五月;六月;七月;八月;九月;十月;十一月;十二月"
        var month2004="正月;二月;閏二月;三月;四月;五月;六月;七月;八月;九月;十月;十一月;十二月"
        var month2006="正月;二月;三月;四月;五月;六月;七月;閏七月;八月;九月;十月;十一月;十二月"
        var Dn="初一;初二;初三;初四;初五;初六;初七;初八;初九;初十;十一;十二;十三;十四;十五;十六;十七;十八;十九;二十;廿一;廿二;廿三;廿四;廿五;廿六;廿七;廿八;廿九;三十";

        var Ys=new Array(arrLen);
        Ys[0]=919094400;Ys[1]=949680000;Ys[2]=980265600;
        Ys[3]=1013443200;Ys[4]=1044028800;Ys[5]=1074700800;
        Ys[6]=1107878400;Ys[7]=1138464000;

        var Yn=new Array(arrLen);   //農曆年的名稱
        Yn[0]="己卯年";Yn[1]="庚辰年";Yn[2]="辛巳年";
        Yn[3]="壬午年";Yn[4]="癸未年";Yn[5]="甲申年";
        Yn[6]="乙酉年";Yn[7]="丙戌年"; 
        var D=new Date();
        var yy=D.getYear();
        var mm=D.getMonth()+1;
        var dd=D.getDate();
        var ww=D.getDay();
        if (ww==0) ww="<font color=RED>星期日";
        if (ww==1) ww="星期一";
        if (ww==2) ww="星期二";
        if (ww==3) ww="星期三";
        if (ww==4) ww="星期四";
        if (ww==5) ww="星期五";
        if (ww==6) ww="<font color=RED>星期六";
        ww=ww;
        var ss=parseInt(D.getTime() / 1000);
        if (yy<100) yy="19"+yy;

        for (i=0;i<arrLen;i++)
        if (ss>=Ys[i]){
           iyear=i;
           sValue=ss-Ys[i];    //當年的秒數
           }
        dayiy=parseInt(sValue/spd)+1;    //當年的天數

        var dpm=year1999;
        if (iyear==1) dpm=year2000;
        if (iyear==2) dpm=year2001;
        if (iyear==3) dpm=year2002;
        if (iyear==4) dpm=year2003;
        if (iyear==5) dpm=year2004;
        if (iyear==6) dpm=year2005;
        if (iyear==7) dpm=year2006;
        dpm=dpm.split(";");

        var Mn=month1999;
        if (iyear==2) Mn=month2001;
        if (iyear==5) Mn=month2004;
        if (iyear==7) Mn=month2006;
        Mn=Mn.split(";");

        var Dn="初一;初二;初三;初四;初五;初六;初七;初八;初九;初十;十一;十二;十三;十四;十五;十六;十七;十八;十九;二十;廿一;廿二;廿三;廿四;廿五;廿六;廿七;廿八;廿九;三十";
        Dn=Dn.split(";");

        dayim=dayiy;

        var total=new Array(13);
        total[0]=parseInt(dpm[0]);
        for (i=1;i<dpm.length-1;i++) total[i]=parseInt(dpm[i])+total[i-1];
        for (i=dpm.length-1;i>0;i--)
        if (dayim>total[i-1]){
           dayim=dayim-total[i-1];
           miy=i;
           }
        bsWeek=ww;
        bsDate=yy+"年"+mm+"月";
        bsDate2=dd;
        bsYear="農曆"+Yn[iyear];
        bsYear2=Mn[miy]+Dn[dayim-1];
        if (ss>=Ys[7]||ss<Ys[0]) bsYear=Yn[7];
        return bsYear+bsYear2;


	}





