js 时间函数应用加、减、比较、格式转换的示例代码

  

复制代码 代码如下:

  // JavaScript Document

  //---------------------------------------------------

  // 判断闰年

  //---------------------------------------------------

  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的扩展,将 Date 转化为指定格式的String

  // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,

  // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)

  // 例子:

  // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423

  // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18

  Date.prototype.Format = function(fmt)

  { //author: meizz

  var o = {

  "M+" : this.getMonth()+1, //月份

  "d+" : this.getDate(), //日

  "h+" : this.getHours(), //小时

  "H+" : this.getHours(), //小时

  "m+" : this.getMinutes(), //分

  "s+" : this.getSeconds(), //秒

  "q+" : Math.floor((this.getMonth()+3)/3), //季度

  "S" : this.getMilliseconds() //毫秒

  };

  if(/(y+)/.test(fmt))

  fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));

  for(var k in o)

  if(new RegExp("("+ k +")").test(fmt))

  fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));

  return fmt;

  }

  /**

  * 对Date的扩展,将 Date 转化为指定格式的String

  * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q) 可以用 1-2 个占位符

  * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)

  * eg:

  * (new Date()).pattern("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423

  * (new Date()).pattern("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04

  * (new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04

  * (new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04

  * (new Date()).pattern("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18

  */

  Date.prototype.pattern=function(fmt) {

  var o = {

  "M+" : this.getMonth()+1, //月份

  "d+" : this.getDate(), //日

  "h+" : this.getHours()%12 == 0 ? 12 : this.getHours()%12, //小时

  "H+" : this.getHours(), //小时

  "m+" : this.getMinutes(), //分

  "s+" : this.getSeconds(), //秒

  "q+" : Math.floor((this.getMonth()+3)/3), //季度

  "S" : this.getMilliseconds() //毫秒

  };

  var week = {

  "0" : "/u65e5",

  "1" : "/u4e00",

  "2" : "/u4e8c",

  "3" : "/u4e09",

  "4" : "/u56db",

  "5" : "/u4e94",

  "6" : "/u516d"

  };

  if(/(y+)/.test(fmt)){

  fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));

  }

  if(/(E+)/.test(fmt)){

  fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "/u661f/u671f" : "/u5468") : "")+week[this.getDay()+""]);

  }

  for(var k in o){

  if(new RegExp("("+ k +")").test(fmt)){

  fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));

  }

  }

  return fmt;

  }

  //+---------------------------------------------------

  //| 求两个时间的天数差 日期格式为 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(dtTmp.getFullYear(), (dtTmp.getMonth()), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds()+Number); //秒

  case 'n' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes()+Number, dtTmp.getSeconds()); //分

  case 'h' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()), dtTmp.getDate(), dtTmp.getHours()+Number, dtTmp.getMinutes(), dtTmp.getSeconds()); //时

  case 'd' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()), dtTmp.getDate()+Number, dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds()); //天

  case 'w' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()), dtTmp.getDate()+Number*7, dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds()); //周

  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;

  }

  //+---------------------------------------------------

  //| 字符串转成日期类型

  //| 格式 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;

  }

  页面验证代码

  

复制代码 代码如下:

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  <html xmlns="http://www.w3.org/1999/xhtml">

  <head>

  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

  <script src="timedata.js" type="text/javascript"></script>

  <script type="text/javascript">

  var nowtime= new Date();

  function newdatetime(){

  nowtime=nowtime.DateAdd("h",35);

  str=nowtime.Format("yyyy-MM-dd HH:mm:ss");

  alert(str);

  }

  </script>

  <title>无标题文档</title>

  </head>

  <body>

  <input type="button" title="格式化" onclick="newdatetime()" value="点击查看"/>

  </body>

  </html>