【轉】js日期時間函數
Date.prototype.isLeapYear 判斷閏年
Date.prototype.Format 日期格式化
Date.prototype.DateAdd 日期計算
Date.prototype.DateDiff 比較日期差
Date.prototype.toString 日期轉字符串
Date.prototype.toArray 日期分割為數組
Date.prototype.DatePart 取日期的部分信息
Date.prototype.MaxDayOfDate 取日期所在月的最大天數
Date.prototype.WeekNumOfYear 判斷日期所在年的第幾周
StringToDate 字符串轉日期型
IsValidDate 驗證日期有效性
CheckDateTime 完整日期時間檢查
daysBetween 日期天數差
Date.prototype.Format 日期格式化
Date.prototype.DateAdd 日期計算
Date.prototype.DateDiff 比較日期差
Date.prototype.toString 日期轉字符串
Date.prototype.toArray 日期分割為數組
Date.prototype.DatePart 取日期的部分信息
Date.prototype.MaxDayOfDate 取日期所在月的最大天數
Date.prototype.WeekNumOfYear 判斷日期所在年的第幾周
StringToDate 字符串轉日期型
IsValidDate 驗證日期有效性
CheckDateTime 完整日期時間檢查
daysBetween 日期天數差
js 代碼
- //---------------------------------------------------
- // 判斷閏年
- //---------------------------------------------------
- Date.prototype.isLeapYear = function()
- {
- return (0==this.getYear()%4&&((this.getYear()%100!=0)||(this.getYear()%400==0)));
- }
- //---------------------------------------------------
- // 日期格式化
- // 格式 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;
- }
- //+---------------------------------------------------
- //| 求兩個時間的天數差 日期格式為 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 格式為日期型或者 有效日期格式字符串
- //+---------------------------------------------------
- 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;
- }
- //+---------------------------------------------------
- //| 日期合法性驗證
- //| 格式為:YYYY-MM-DD或YYYY/MM/DD
- //+---------------------------------------------------
- function IsValidDate(DateStr)
- {
- var sDate=DateStr.replace(/(^\s+|\s+$)/g,''); //去兩邊空格;
- if(sDate=='') return true;
- //如果格式滿足YYYY-(/)MM-(/)DD或YYYY-(/)M-(/)DD或YYYY-(/)M-(/)D或YYYY-(/)MM-(/)D就替換為''
- //數據庫中,合法日期可以是:YYYY-MM/DD(2003-3/21),數據庫會自動轉換為YYYY-MM-DD格式
- var s = sDate.replace(/[\d]{ 4,4 }[\-/]{ 1 }[\d]{ 1,2 }[\-/]{ 1 }[\d]{ 1,2 }/g,'');
- if (s=='') //說明格式滿足YYYY-MM-DD或YYYY-M-DD或YYYY-M-D或YYYY-MM-D
- {
- var t=new Date(sDate.replace(/\-/g,'/'));
- var ar = sDate.split(/[-/:]/);
- if(ar[0] != t.getYear() || ar[1] != t.getMonth()+1 || ar[2] != t.getDate())
- {
- //alert('錯誤的日期格式!格式為:YYYY-MM-DD或YYYY/MM/DD。注意閏年。');
- return false;
- }
- }
- else
- {
- //alert('錯誤的日期格式!格式為:YYYY-MM-DD或YYYY/MM/DD。注意閏年。');
- return false;
- }
- return true;
- }
- //+---------------------------------------------------
- //| 日期時間檢查
- //| 格式為:YYYY-MM-DD HH:MM:SS
- //+---------------------------------------------------
- function CheckDateTime(str)
- {
- var reg = /^(\d+)-(\d{ 1,2 })-(\d{ 1,2 }) (\d{ 1,2 }):(\d{ 1,2 }):(\d{ 1,2 })$/;
- var r = str.match(reg);
- if(r==null)return false;
- r[2]=r[2]-1;
- var d= new Date(r[1],r[2],r[3],r[4],r[5],r[6]);
- if(d.getFullYear()!=r[1])return false;
- if(d.getMonth()!=r[2])return false;
- if(d.getDate()!=r[3])return false;
- if(d.getHours()!=r[4])return false;
- if(d.getMinutes()!=r[5])return false;
- if(d.getSeconds()!=r[6])return false;
- return true;
- }
- //+---------------------------------------------------
- //| 把日期分割成數組
- //+---------------------------------------------------
- Date.prototype.toArray = function()
- {
- var myDate = this;
- var myArray = Array();
- myArray[0] = myDate.getFullYear();
- myArray[1] = myDate.getMonth();
- myArray[2] = myDate.getDate();
- myArray[3] = myDate.getHours();
- myArray[4] = myDate.getMinutes();
- myArray[5] = myDate.getSeconds();
- return myArray;
- }
- //+---------------------------------------------------
- //| 取得日期數據信息
- //| 參數 interval 表示數據類型
- //| y 年 m月 d日 w星期 ww周 h時 n分 s秒
- //+---------------------------------------------------
- Date.prototype.DatePart = function(interval)
- {
- var myDate = this;
- var partStr='';
- var Week = ['日','一','二','三','四','五','六'];
- switch (interval)
- {
- case 'y' :partStr = myDate.getFullYear();break;
- case 'm' :partStr = myDate.getMonth()+1;break;
- case 'd' :partStr = myDate.getDate();break;
- case 'w' :partStr = Week[myDate.getDay()];break;
- case 'ww' :partStr = myDate.WeekNumOfYear();break;
- case 'h' :partStr = myDate.getHours();break;
- case 'n' :partStr = myDate.getMinutes();break;
- case 's' :partStr = myDate.getSeconds();break;
- }
- return partStr;
- }
- //+---------------------------------------------------
- //| 取得當前日期所在月的最大天數
- //+---------------------------------------------------
- Date.prototype.MaxDayOfDate = function()
- {
- var myDate = this;
- var ary = myDate.toArray();
- var date1 = (new Date(ary[0],ary[1]+1,1));
- var date2 = date1.dateAdd(1,'m',1);
- var result = dateDiff(date1.Format('yyyy-MM-dd'),date2.Format('yyyy-MM-dd'));
- return result;
- }
- //+---------------------------------------------------
- //| 取得當前日期所在周是一年中的第幾周
- //+---------------------------------------------------
- Date.prototype.WeekNumOfYear = function()
- {
- var myDate = this;
- var ary = myDate.toArray();
- var year = ary[0];
- var month = ary[1]+1;
- var day = ary[2];
- document.write('< script language=VBScript\> \n');
- document.write('myDate = DateValue(''+month+'-'+day+'-'+year+'') \n');
- document.write('result = DatePart('ww', myDate) \n');
- document.write(' \n');
- return result;
- }
- //+---------------------------------------------------
- //| 字符串轉成日期類型
- //| 格式 MM/dd/YYYY MM-dd-YYYY YYYY/MM/dd YYYY-MM-dd
- //+---------------------------------------------------
- function StringToDate(DateStr)
- {
- var converted = Date.parse(DateStr);
- var myDate = new Date(converted);
- if (isNaN(myDate))
- {
- //var delimCahar = DateStr.indexOf('/')!=-1?'/':'-';
- var arys= DateStr.split('-');
- myDate = new Date(arys[0],--arys[1],arys[2]);
- }
- return myDate;
- }