简单谈谈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 相关文章推荐
javascript 模式设计之工厂模式学习心得
Apr 27 Javascript
js实现字符串转日期格式的方法
May 20 Javascript
基于JavaScript实现网页倒计时自动跳转代码
Dec 28 Javascript
Node.js与MySQL交互操作及其注意事项
Oct 05 Javascript
微信小程序 slider 详解及实例代码
Jan 10 Javascript
常见的浏览器Hack技巧整理
Jun 29 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
Jan 21 Javascript
基于vue-element组件实现音乐播放器功能
May 06 Javascript
微信小程序嵌入腾讯视频源过程详解
Aug 08 Javascript
js实现移动端tab切换时下划线滑动效果
Sep 08 Javascript
JavaScript Window浏览器对象模型原理解析
May 30 Javascript
原生JavaScript实现轮播图
Jan 10 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
一些花式咖啡的配方
2021/03/03 冲泡冲煮
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
JQuery1.4+ Ajax IE8 内存泄漏问题
2010/10/15 Javascript
浅说js变量
2011/05/25 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
js实现登录验证码
2016/12/22 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
js 作用域和变量详解
2017/02/16 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
[00:11]战神迅矛
2019/03/06 DOTA
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
Python使用shelve模块实现简单数据存储的方法
2015/05/20 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
专门经营化妆刷的美国彩妆品牌:Sigma Beauty
2017/09/11 全球购物
Farfetch澳大利亚官网:Farfetch Australia
2020/04/26 全球购物
元旦红领巾广播稿
2014/02/19 职场文书
参观接待方案
2014/03/17 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
酒桌上的祝酒词
2015/08/12 职场文书
html+css实现文字折叠特效实例
2021/06/02 HTML / CSS