简单谈谈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代码
Mar 26 Javascript
js中把JSON字符串转换成JSON对象最好的方法
Mar 21 Javascript
Javascript基础教程之JavaScript语法
Jan 18 Javascript
纯javascript代码实现计算器功能(三种方法)
Sep 07 Javascript
JavaScript中对JSON对象的基本操作示例
May 21 Javascript
Node.js 数据加密传输浅析
Nov 16 Javascript
bootstrap table实现单击单元格可编辑功能
Mar 28 Javascript
Vue.js实现移动端短信验证码功能
Mar 29 Javascript
Bootstrap datepicker日期选择器插件使用详解
Jul 26 Javascript
node.js 发布订阅模式的实例
Sep 10 Javascript
微信小程序批量上传图片到七牛(推荐)
Dec 19 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
May 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数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
php搜索文件程序分享
2015/10/30 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
Convert Seconds To Hours
2007/06/16 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
jQuery如何实现点击页面获得当前点击元素的id或其他信息
2014/01/09 Javascript
理解Javascript的动态语言特性
2015/06/17 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
2015/09/14 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
2016/09/02 Javascript
前端 Vue.js 和 MVVM 详细介绍
2016/12/29 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
2018/02/27 Javascript
vue 开发一个按钮组件的示例代码
2018/03/27 Javascript
jQuery中复合选择器简单用法示例
2018/03/31 jQuery
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
Vue实现省市区三级联动
2020/12/27 Vue.js
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
5种Python单例模式的实现方式
2016/01/14 Python
python中matplotlib的颜色及线条控制的示例
2018/03/16 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
python实现飞行棋游戏
2020/02/05 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
python使用ctypes库调用DLL动态链接库
2020/10/22 Python
Chupi官网:在爱尔兰手工制作的订婚、结婚戒指和精美珠宝
2020/09/28 全球购物
中专毕业生的自荐书
2014/07/01 职场文书
岗位竞聘报告范文
2014/11/06 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python