简单谈谈javascript Date类型


Posted in Javascript onSeptember 06, 2015

1 创建一个新的日期对象,如果不带参数,则对象自动获得当前的日期和时间

var d = new Date()

2 如果需要指定特定的日期,则可以通过Date.parse() 或者 Date().UTC(),返回时间戳作为 new Date()的参数

Date.parse() 用法:

var time = Date.parse('2015/05/20');
var newDate = new Date(time);//Wed May 20 2015 00:00:00 GMT+0800 (中国标准时间)
//转换为格林威治时间
newDate.toUTCString(); //Tue, 19 May 2015 16:00:00 GMT

也可以直接 new Date('2015/05/20') 指定日期,new Date() 构造函数会自动调用 Date.parse()静态方法。

Date.UTC()

Date.UTC()的参数分别是年,月(从0到11),日(1-31),时(0-23),分(0-59),秒(0-59),毫秒(0-999),最少参数2个,即应该包含年月,其他不填的默认为0。

如果要创建的时间为中国标准时间的2015年5月20日,则代码应表示为

var myDate = new Date(Date.UTC(2015,5,19,16,0,0)) //Sat Jun 20 2015 00:00:00 GMT+0800
//格林威治时间
myDate.toUTCString() // Fri, 19 Jun 2015 16:00:00 GMT

 其他:

var d = new Date();
//年
d.getFullYear() 
//月
d.getMonth()
//日
d.getDate()

下面我们通过具体的示例来看看

/** 
 * 日期时间脚本库方法列表: 
 * (1)Date.isValiDate:日期合法性验证 
 * (2)Date.isValiTime:时间合法性验证 
 * (3)Date.isValiDateTime:日期和时间合法性验证 
 * (4)Date.prototype.isLeapYear:判断是否闰年 
 * (5)Date.prototype.format:日期格式化 
 * (6)Date.stringToDate:字符串转成日期类型 
 * (7)Date.daysBetween:计算两个日期的天数差 
 * (8)Date.prototype.dateAdd:日期计算,支持正负数 
 * (9)Date.prototype.dateDiff:比较日期差:比较两个时期相同的字段,返回相差值 
 * (10)Date.prototype.toArray:把日期分割成数组:按数组序号分别为:年月日时分秒 
 * (11)Date.prototype.datePart:取得日期数据信息 
 */ 

/** 
 * 日期合法性验证:判断dataStr是否符合formatStr指定的日期格式 
 * 示例: 
 * (1)alert(Date.isValiDate('2008-02-29','yyyy-MM-dd'));//true 
 * (2)alert(Date.isValiDate('aaaa-58-29','yyyy-MM-dd'));//false 
 * dateStr:必选,日期字符串 
 * formatStr:可选,格式字符串,可选格式有:(1)yyyy-MM-dd(默认格式)或YYYY-MM-DD (2)yyyy/MM/dd或YYYY/MM/DD (3)MM-dd-yyyy或MM-DD-YYYY (4)MM/dd/yyyy或MM/DD/YYYY 
 */ 
Date.isValiDate = function(dateStr, formatStr) 
{ 
  if(!dateStr){ 
    return false; 
  } 
  if(!formatStr){ 
    formatStr = "yyyy-MM-dd";//默认格式:yyyy-MM-dd 
  } 
  if(dateStr.length!=formatStr.length){ 
    return false; 
  }else{ 
    if(formatStr=="yyyy-MM-dd"||formatStr=="YYYY-MM-DD"){ 
      var r1=/^(((((([02468][048])|([13579][26]))(00))|(\d{2}(([02468][48])|([13579][26]))))\-((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-([0-2][0-9]))))|(\d{2}(([02468][1235679])|([13579][01345789]))\-((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-(([0-1][0-9])|(2[0-8]))))))$/; 
      return r1.test(dateStr); 
    }else if(formatStr=="yyyy/MM/dd"||formatStr=="YYYY/MM/DD"){ 
      var r2=/^(((((([02468][048])|([13579][26]))(00))|(\d{2}(([02468][48])|([13579][26]))))\/((((0[13578])|(1[02]))\/(([0-2][0-9])|(3[01])))|(((0[469])|(11))\/(([0-2][0-9])|(30)))|(02\/([0-2][0-9]))))|(\d{2}(([02468][1235679])|([13579][01345789]))\/((((0[13578])|(1[02]))\/(([0-2][0-9])|(3[01])))|(((0[469])|(11))\/(([0-2][0-9])|(30)))|(02\/(([0-1][0-9])|(2[0-8]))))))$/; 
      return r2.test(dateStr); 
    }else if(formatStr=="MM-dd-yyyy"||formatStr=="MM-DD-YYYY"){ 
      var r3=/^((((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-([0-2][0-9])))\-(((([02468][048])|([13579][26]))(00))|(\d{2}(([02468][48])|([13579][26])))))|(((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-(([0-1][0-9])|(2[0-8])))))\-\d{2}(([02468][1235679])|([13579][01345789])))$/; 
      return r3.test(dateStr); 
    }else if(formatStr=="MM/dd/yyyy"||formatStr=="MM/DD/YYYY"){ 
      var r4=/^((((((0[13578])|(1[02]))\/(([0-2][0-9])|(3[01])))|(((0[469])|(11))\/(([0-2][0-9])|(30)))|(02\/([0-2][0-9])))\/(((([02468][048])|([13579][26]))(00))|(\d{2}(([02468][48])|([13579][26])))))|(((((0[13578])|(1[02]))\/(([0-2][0-9])|(3[01])))|(((0[469])|(11))\/(([0-2][0-9])|(30)))|(02\/(([0-1][0-9])|(2[0-8])))))\/\d{2}(([02468][1235679])|([13579][01345789])))$/; 
      return r4.test(dateStr); 
    }else{ 
      alert("日期格式不正确!"); 
      return false; 
    } 
  } 
  return false; 
} 

/** 
 * 时间合法性验证:判断timeStr是否符合formatStr指定的时间格式 
 * 示例: 
 * (1)alert(Date.isValiTime('23:59:59','hh:mm:ss'));//true 
 * (2)alert(Date.isValiTime('24-68-89','hh:mm:ss'));//false 
 * timeStr:必选,日期字符串 
 * formatStr:可选,格式字符串,可选格式有:(1)hh:mm:ss(默认格式) (2)hh-mm-ss (3)hh/mm/ss 
 */ 
Date.isValiTime = function(timeStr, formatStr) 
{ 
  if(!timeStr){ 
    return false; 
  } 
  if(!formatStr){ 
    formatStr = "hh:mm:ss";//默认格式:hh:mm:ss 
  } 
  if(timeStr.length!=formatStr.length){ 
    return false; 
  }else{ 
    if(formatStr=="hh:mm:ss"){ 
      var r1=/^(([0-1][0-9])|(2[0-3]))\:([0-5][0-9])\:([0-5][0-9])$/; 
      return r1.test(timeStr); 
    }else if(formatStr=="hh-mm-ss"){ 
      var r2=/^(([0-1][0-9])|(2[0-3]))\-([0-5][0-9])\-([0-5][0-9])$/; 
      return r2.test(timeStr); 
    }else if(formatStr=="hh/mm/ss"){ 
      var r3=/^(([0-1][0-9])|(2[0-3]))\/([0-5][0-9])\/([0-5][0-9])$/; 
      return r3.test(timeStr); 
    }else{ 
      alert("时间格式不正确!"); 
      return false; 
    } 
  } 
  return false; 
} 

/** 
 * 日期和时间合法性验证 
 * 格式:yyyy-MM-dd hh:mm:ss 
 */ 
Date.isValiDateTime = function(dateTimeStr) 
{ 
  var dateTimeReg=/^(((((([02468][048])|([13579][26]))(00))|(\d{2}(([02468][48])|([13579][26]))))\-((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-([0-2][0-9]))))|(\d{2}(([02468][1235679])|([13579][01345789]))\-((((0[13578])|(1[02]))\-(([0-2][0-9])|(3[01])))|(((0[469])|(11))\-(([0-2][0-9])|(30)))|(02\-(([0-1][0-9])|(2[0-8]))))))(\s{1}(([0-1][0-9])|(2[0-3]))\:([0-5][0-9])\:([0-5][0-9]))?$/ 
  return dateTimeReg.test(dateTimeStr); 
} 

/** 
 * 判断闰年 :一般规律为:四年一闰,百年不闰,四百年再闰。 
 */ 
Date.prototype.isLeapYear = function() 
{ 
  return (this.getYear()%4==0&&((this.getYear()%100!=0)||(this.getYear()%400==0))); 
} 

/** 
 * 日期格式化: 
 * formatStr:可选,格式字符串,默认格式:yyyy-MM-dd hh:mm:ss 
 * 约定如下格式: 
 * (1)YYYY/yyyy/YY/yy 表示年份 
 * (2)MM/M 月份 
 * (3)W/w 星期 
 * (4)dd/DD/d/D 日期 
 * (5)hh/HH/h/H 时间 
 * (6)mm/m 分钟 
 * (7)ss/SS/s/S 秒 
 * (8)iii 毫秒 
 */ 
Date.prototype.format = function(formatStr) 
{ 
  var str = formatStr; 
  if(!formatStr){ 
    str = "yyyy-MM-dd hh:mm:ss";//默认格式 
  } 
  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?(parseInt(this.getMonth())+1).toString():'0' + (parseInt(this.getMonth())+1)); 
  str=str.replace(/M/g,(parseInt(this.getMonth())+1)); 
   
  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()); 
   
  str=str.replace(/iii/g,this.getMilliseconds()<10?'00'+this.getMilliseconds():(this.getMilliseconds()<100?'0'+this.getMilliseconds():this.getMilliseconds())); 
   
  return str; 
} 

/** 
 * 字符串转成日期类型: 
 * dateStr:必选,日期字符串,如果无法解析成日期类型,返回null 
 * 格式: 
 * (1)yyyy/MM/dd:IE和FF通用 
 * (2)MM/dd/yyyy:IE和FF通用 
 * (3)MM-dd-yyyy:仅IE 
 * (4)yyyy-MM-dd:非IE,且时钟被解析在8点整 
 */ 
Date.stringToDate = function(dateStr) 
{ 
  if(!dateStr){ 
    alert("字符串无法解析为日期"); 
    return null; 
  }else{ 
    if(Date.isValiDate(dateStr,"yyyy/MM/dd")||Date.isValiDate(dateStr,"MM/dd/yyyy")){ 
      return new Date(Date.parse(dateStr)); 
    }else{ 
      if((!-[1,])){//IE 
        if(Date.isValiDate(dateStr,"MM-dd-yyyy")){ 
          return new Date(Date.parse(dateStr)); 
        }else{ 
          alert("字符串无法解析为日期"); 
          return null; 
        } 
      }else{//非IE 
        if(Date.isValiDate(dateStr,"yyyy-MM-dd")){ 
          return new Date(Date.parse(dateStr)); 
        }else{ 
          alert("字符串无法解析为日期"); 
          return null; 
        } 
      } 
    } 
  } 
  return null; 
} 

/** 
 * 计算两个日期的天数差: 
 * dateOne:必选,必须是Data类型的实例 
 * dateTwo:必选,必须是Data类型的实例 
 */ 
Date.daysBetween = function(dateOne,dateTwo) 
{ 
  if((dateOne instanceof Date)==false||(dateTwo instanceof Date)==false){ 
    return 0; 
  }else{ 
    return Math.abs(Math.floor((dateOne.getTime()-dateTwo.getTime())/1000/60/60/24)); 
  } 
} 

/** 
 * 日期计算:支持负数,即可加可减,返回计算后的日期 
 * num:必选,必须是数字,且正数是时期加,负数是日期减 
 * field:可选,标识是在哪个字段上进行相加或相减,字段见如下的约定。无此参数时,默认为d 
 * 约定如下格式: 
 * (1)Y/y 年 
 * (2)M 月 
 * (3)W/w 周 
 * (4)D/d 日 
 * (5)H/h 时 
 * (6)m 分 
 * (7)S/s 秒 
 * (8)Q/q 季 
 */ 
Date.prototype.dateAdd = function(num, field) 
{ 
  if((!num)||isNaN(num)||parseInt(num)==0){ 
    return this; 
  } 
  if(!field){ 
    field = "d"; 
  } 
  switch(field){ 
    case 'Y': 
    case 'y':return new Date((this.getFullYear()+num), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds());break; 
    case 'Q': 
    case 'q':return new Date(this.getFullYear(), (this.getMonth()+num*3), this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds());break; 
    case 'M':return new Date(this.getFullYear(), this.getMonth()+num, this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds());break; 
    case 'W': 
    case 'w':return new Date(Date.parse(this) + ((86400000 * 7) * num));break; 
    case 'D': 
    case 'd':return new Date(Date.parse(this) + (86400000 * num));break; 
    case 'H': 
    case 'h':return new Date(Date.parse(this) + (3600000 * num));break; 
    case 'm':return new Date(Date.parse(this) + (60000 * num));break; 
    case 'S': 
    case 's':return new Date(Date.parse(this) + (1000 * num));break; 
    default: return this; 
  } 
  return this; 
} 

/** 
 * 比较日期差:比较两个时期相同的字段,返回相差值 
 * dtEnd:必选,必须是Data类型的实例 
 * field:可选,标识是在哪个字段上进行比较,字段见如下的约定。无此参数时,默认为d 
 * 约定如下格式: 
 * (1)Y/y 年 
 * (2)M 月 
 * (3)W/w 周 
 * (4)D/d 日 
 * (5)H/h 时 
 * (6)m 分 
 * (7)S/s 秒 
 */ 
Date.prototype.dateDiff = function(dtEnd, field) 
{ 
  var dtStart = this; 
  if((dtEnd instanceof Date)==false){ 
    return 0; 
  }else{ 
    if(!field){ 
      field = "d"; 
    } 
    switch(field){ 
      case 'Y': 
      case 'y':return dtEnd.getFullYear() - dtStart.getFullYear();break; 
      case 'M':return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1);break; 
      case 'W': 
      case 'w':return parseInt((dtEnd - dtStart) / (86400000 * 7));break; 
      case 'D': 
      case 'd':return parseInt((dtEnd - dtStart) / 86400000);break; 
      case 'H': 
      case 'h':return parseInt((dtEnd - dtStart) / 3600000);break; 
      case 'm':return parseInt((dtEnd - dtStart) / 60000);break; 
      case 'S': 
      case 's':return parseInt((dtEnd - dtStart) / 1000);break; 
      default: return 0; 
    } 
    return 0; 
  } 
} 

/** 
 * 把日期分割成数组:按数组序号分别为:年月日时分秒 
 */ 
Date.prototype.toArray = function() 
{ 
  var myArray = new Array(); 
  myArray[0] = this.getFullYear(); 
  myArray[1] = this.getMonth(); 
  myArray[2] = this.getDate(); 
  myArray[3] = this.getHours(); 
  myArray[4] = this.getMinutes(); 
  myArray[5] = this.getSeconds(); 
  return myArray; 
} 

/** 
 * 取得日期数据信息: 
 * field:可选,标识是在哪个字段上进行比较,字段见如下的约定。无此参数时,默认为d 
 * (1)Y/y 年 
 * (2)M 月 
 * (3)W/w 周 
 * (4)D/d 日 
 * (5)H/h 时 
 * (6)m 分 
 * (7)S/s 秒 
 */ 
Date.prototype.datePart = function(field) 
{ 
  if(!field){ 
    field = "d"; 
  } 
  var Week = ['日','一','二','三','四','五','六']; 
  switch (field){ 
    case 'Y' : 
    case 'y' :return this.getFullYear();break; 
    case 'M' :return (this.getMonth()+1);break; 
    case 'W' : 
    case 'w' :return Week[this.getDay()];break; 
    case 'D' : 
    case 'd' :return this.getDate();break; 
    case 'H' : 
    case 'h' :return this.getHours();break; 
    case 'm' :return this.getMinutes();break; 
    case 's' :return this.getSeconds();break; 
    default:return this.getDate(); 
  } 
  return this.getDate(); 
}
Javascript 相关文章推荐
两种简单实现菜单高亮显示的JS类代码
Jun 27 Javascript
jquery focus(fn),blur(fn)方法实例代码
Dec 16 Javascript
JS字符串截取函数实例
Dec 27 Javascript
javascript对象的使用和属性操作示例详解
Mar 02 Javascript
js实现的标题栏新消息闪烁提示效果
Jun 06 Javascript
一个仿糯米弹框效果demo
Jul 22 Javascript
jquery datatable后台封装数据示例代码
Aug 07 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
Aug 19 Javascript
更靠谱的H5横竖屏检测方法(js代码)
Sep 13 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
Jan 05 Javascript
实用Javascript调试技巧分享(小结)
Jun 18 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
Oct 24 Javascript
Js制作点击输入框时默认文字消失的效果
Sep 05 #Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
Sep 05 #Javascript
jQuery焦点图轮播特效代码分享(3款)
Sep 05 #Javascript
javascript日期操作详解(脚本之家整理)
Sep 05 #Javascript
javascript中日期函数new Date()的浏览器兼容性问题
Sep 05 #Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
Sep 05 #Javascript
javascript 判断两个日期之差的示例代码
Sep 05 #Javascript
You might like
在同一窗体中使用PHP来处理多个提交任务
2006/10/09 PHP
PHP实现加密的几种方式介绍
2015/02/22 PHP
Joomla开启SEF的方法
2016/05/04 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
jquery中文乱码的多种解决方法
2013/06/21 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
2015/01/28 Javascript
js实现网站最上边可关闭的浮动广告条代码
2015/09/04 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
H5实现手机拍照和选择上传功能
2019/12/18 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
python Socket之客户端和服务端握手详解
2017/09/18 Python
聊聊Python中的pypy
2018/01/12 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
Python字典dict常用方法函数实例
2020/11/09 Python
Django缓存Cache使用详解
2020/11/30 Python
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
Stio官网:男女、儿童户外服装
2019/12/13 全球购物
领导证婚人证婚词
2014/01/13 职场文书
公司委托书范本
2014/04/04 职场文书
计划生育标语
2014/06/23 职场文书
pytorch model.cuda()花费时间很长的解决
2021/06/01 Python
nginx配置虚拟主机的详细步骤
2021/07/21 Servers
Redis 异步机制
2022/05/15 Redis