简单谈谈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 09 Javascript
jQuery 无刷新分页实例代码
Nov 12 Javascript
Jquery Post处理后不进入回调的原因及解决方法
Jul 15 Javascript
JavaScript实现随机替换图片的方法
Apr 16 Javascript
jQuery实现带动画效果的多级下拉菜单代码
Sep 08 Javascript
Eclipse引入jquery报错如何解决
Dec 01 Javascript
jquery实现图片平滑滚动详解
Mar 22 jQuery
浅谈vuejs实现数据驱动视图原理
Feb 23 Javascript
JS实现的3des+base64加密解密算法完整示例
May 18 Javascript
vue 弹框产生的滚动穿透问题的解决
Sep 21 Javascript
vue中使用vee-validator完成表单校验方案
Nov 01 Javascript
JavaScript 自定义html元素鼠标右键菜单功能
Dec 02 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操作MongoDB时的整数问题及对策说明
2011/05/02 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
php动态变量定义及使用
2015/06/10 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
Javascript中的数学函数集合
2007/05/08 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
2013/05/17 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
js实现倒计时器自定义时间和暂停
2019/02/25 Javascript
vue 解决文本框被键盘遮住的问题
2019/11/06 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
Python实现的彩票机选器实例
2015/06/17 Python
浅谈python中的占位符
2017/11/09 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
Python supervisor强大的进程管理工具的使用
2019/04/24 Python
Python的pygame安装教程详解
2020/02/10 Python
送给他或她的礼物:FUN.com
2018/08/17 全球购物
大学生就业自我鉴定
2013/10/26 职场文书
人事档案接收函
2014/01/12 职场文书
迟到检讨书500字
2014/02/05 职场文书
产品质量承诺书范文
2014/03/27 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
小学教育见习报告
2014/10/31 职场文书
销售员自我评价
2015/03/11 职场文书
东京审判观后感
2015/06/01 职场文书