JavaScript日期工具类DateUtils定义与用法示例


Posted in Javascript onSeptember 03, 2018

本文实例讲述了JavaScript日期工具类DateUtils定义与用法。分享给大家供大家参考,具体如下:

DateUtils = {
  patterns: {
   PATTERN_ERA: 'G', //Era 标志符 Era strings. For example: "AD" and "BC"
   PATTERN_YEAR: 'y', //年
   PATTERN_MONTH: 'M', //月份
   PATTERN_DAY_OF_MONTH: 'd', //月份的天数
   PATTERN_HOUR_OF_DAY1: 'k', //一天中的小时数(1-24)
   PATTERN_HOUR_OF_DAY0: 'H', //24小时制,一天中的小时数(0-23)
   PATTERN_MINUTE: 'm', //小时中的分钟数
   PATTERN_SECOND: 's', //秒
   PATTERN_MILLISECOND: 'S', //毫秒
   PATTERN_DAY_OF_WEEK: 'E', //一周中对应的星期,如星期一,周一
   PATTERN_DAY_OF_YEAR: 'D', //一年中的第几天
   PATTERN_DAY_OF_WEEK_IN_MONTH: 'F', //一月中的第几个星期(会把这个月总共过的天数除以7,不够准确,推荐用W)
   PATTERN_WEEK_OF_YEAR: 'w', //一年中的第几个星期
   PATTERN_WEEK_OF_MONTH: 'W', //一月中的第几星期(会根据实际情况来算)
   PATTERN_AM_PM: 'a', //上下午标识
   PATTERN_HOUR1: 'h', //12小时制 ,am/pm 中的小时数(1-12)
   PATTERN_HOUR0: 'K', //和h类型
   PATTERN_ZONE_NAME: 'z', //时区名
   PATTERN_ZONE_VALUE: 'Z', //时区值
   PATTERN_WEEK_YEAR: 'Y', //和y类型
   PATTERN_ISO_DAY_OF_WEEK: 'u',
   PATTERN_ISO_ZONE: 'X'
  },
  week: {
   'ch': {
    "0": "\u65e5",
    "1": "\u4e00",
    "2": "\u4e8c",
    "3": "\u4e09",
    "4": "\u56db",
    "5": "\u4e94",
    "6": "\u516d"
   },
   'en': {
    "0": "Sunday",
    "1": "Monday",
    "2": "Tuesday",
    "3": "Wednesday",
    "4": "Thursday",
    "5": "Friday",
    "6": "Saturday"
   }
  },
  //获取当前时间
  getCurrentTime: function() {
   var today = new Date();
   var year = today.getFullYear();
   var month = today.getMonth() + 1;
   var day = today.getDate();
   var hours = today.getHours();
   var minutes = today.getMinutes();
   var seconds = today.getSeconds();
   var timeString = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
   return timeString;
  },
  /*
   * 比较时间大小
   * time1>time2 return 1
   * time1<time2 return -1
   * time1==time2 return 0
   */
  compareTime: function(time1, time2) {
   if(Date.parse(time1.replace(/-/g, "/")) > Date.parse(time2.replace(/-/g, "/"))) {
    return 1;
   } else if(Date.parse(time1.replace(/-/g, "/")) < Date.parse(time2.replace(/-/g, "/"))) {
    return -1;
   } else if(Date.parse(time1.replace(/-/g, "/")) == Date.parse(time2.replace(/-/g, "/"))) {
    return 0;
   }
  },
  //是否闰年
  isLeapYear: function(year) {
   return((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);
  },
  //获取某个月的天数,从0开始
  getDaysOfMonth: function(year, month) {
   return [31, (this.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
  },
  getDaysOfMonth2: function(year, month) {
   // 将天置为0,会获取其上个月的最后一天
   month = parseInt(month) + 1;
   var date = new Date(year, month, 0);
   return date.getDate();
  },
  /*距离现在几天的日期:负数表示今天之前的日期,0表示今天,整数表示未来的日期
   * 如-1表示昨天的日期,0表示今天,2表示后天
   */
  fromToday: function(days) {
   var today = new Date();
   today.setDate(today.getDate() + days);
   var date = today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate();
   return date;
  },
  /**
   * 日期时间格式化
   * @param {Object} dateTime 需要格式化的日期时间
   * @param {String} pattern 格式化的模式,如yyyy-MM-dd hh(HH):mm:ss.S a k K E D F w W z Z
   */
  formt: function(dateTime, pattern) {
   var date = new Date(dateTime);
   if(Bee.StringUtils.isBlank(pattern)) {
    return date.toLocaleString();
   }
   return pattern.replace(/([a-z])\1*/ig, function(matchStr, group1) {
    var replacement = "";
    switch(group1) {
     case Bee.DateUtils.patterns.PATTERN_ERA: //G
      break;
     case Bee.DateUtils.patterns.PATTERN_WEEK_YEAR: //Y
     case Bee.DateUtils.patterns.PATTERN_YEAR: //y
      replacement = date.getFullYear();
      break;
     case Bee.DateUtils.patterns.PATTERN_MONTH: //M
      var month = date.getMonth() + 1;
      replacement = (month < 10 && matchStr.length >= 2) ? "0" + month : month;
      break;
     case Bee.DateUtils.patterns.PATTERN_DAY_OF_MONTH: //d
      var days = date.getDate();
      replacement = (days < 10 && matchStr.length >= 2) ? "0" + days : days;
      break;
     case Bee.DateUtils.patterns.PATTERN_HOUR_OF_DAY1: //k(1~24)
      var hours24 = date.getHours();
      replacement = hours24;
      break;
     case Bee.DateUtils.patterns.PATTERN_HOUR_OF_DAY0: //H(0~23)
      var hours24 = date.getHours();
      replacement = (hours24 < 10 && matchStr.length >= 2) ? "0" + hours24 : hours24;
      break;
     case Bee.DateUtils.patterns.PATTERN_MINUTE: //m
      var minutes = date.getMinutes();
      replacement = (minutes < 10 && matchStr.length >= 2) ? "0" + minutes : minutes;
      break;
     case Bee.DateUtils.patterns.PATTERN_SECOND: //s
      var seconds = date.getSeconds();
      replacement = (seconds < 10 && matchStr.length >= 2) ? "0" + seconds : seconds;
      break;
     case Bee.DateUtils.patterns.PATTERN_MILLISECOND: //S
      var milliSeconds = date.getMilliseconds();
      replacement = milliSeconds;
      break;
     case Bee.DateUtils.patterns.PATTERN_DAY_OF_WEEK: //E
      var day = date.getDay();
      replacement = Bee.DateUtils.week['ch'][day];
      break;
     case Bee.DateUtils.patterns.PATTERN_DAY_OF_YEAR: //D
      replacement = Bee.DateUtils.dayOfTheYear(date);
      break;
     case Bee.DateUtils.patterns.PATTERN_DAY_OF_WEEK_IN_MONTH: //F
      var days = date.getDate();
      replacement = Math.floor(days / 7);
      break;
     case Bee.DateUtils.patterns.PATTERN_WEEK_OF_YEAR: //w
      var days = Bee.DateUtils.dayOfTheYear(date);
      replacement = Math.ceil(days / 7);
      break;
     case Bee.DateUtils.patterns.PATTERN_WEEK_OF_MONTH: //W
      var days = date.getDate();
      replacement = Math.ceil(days / 7);
      break;
     case Bee.DateUtils.patterns.PATTERN_AM_PM: //a
      var hours24 = date.getHours();
      replacement = hours24 < 12 ? "\u4e0a\u5348" : "\u4e0b\u5348";
      break;
     case Bee.DateUtils.patterns.PATTERN_HOUR1: //h(1~12)
      var hours12 = date.getHours() % 12 || 12; //0转为12
      replacement = (hours12 < 10 && matchStr.length >= 2) ? "0" + hours12 : hours12;
      break;
     case Bee.DateUtils.patterns.PATTERN_HOUR0: //K(0~11)
      var hours12 = date.getHours() % 12;
      replacement = hours12;
      break;
     case Bee.DateUtils.patterns.PATTERN_ZONE_NAME: //z
      replacement = Bee.DateUtils.getZoneNameValue(date)['name'];
      break;
     case Bee.DateUtils.patterns.PATTERN_ZONE_VALUE: //Z
      replacement = Bee.DateUtils.getZoneNameValue(date)['value'];
      break;
     case Bee.DateUtils.patterns.PATTERN_ISO_DAY_OF_WEEK: //u
      break;
     case Bee.DateUtils.patterns.PATTERN_ISO_ZONE: //X
      break;
     default:
      break;
    }
    return replacement;
   });
  },
  /**
   * 计算一个日期是当年的第几天
   * @param {Object} date
   */
  dayOfTheYear: function(date) {
   var obj = new Date(date);
   var year = obj.getFullYear();
   var month = obj.getMonth(); //从0开始
   var days = obj.getDate();
   var daysArr = [31, (this.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
   for(var i = 0; i < month; i++) {
    days += daysArr[i];
   }
   return days;
  },
  //获得时区名和值
  getZoneNameValue: function(dateObj) {
   var date = new Date(dateObj);
   date = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
   var arr = date.toString().match(/([A-Z]+)([-+]\d+:?\d+)/);
   var obj = {
    'name': arr[1],
    'value': arr[2]
   };
   return obj;
  }
};
//用法示例
console.log(DateUtils.getCurrentTime())//获取当前时间
console.log(DateUtils.compareTime('2018-8-1','2018-9-3'))//比较时间
console.log(DateUtils.isLeapYear('2018'))//是否闰年
console.log(DateUtils.getDaysOfMonth('2018','9'))//获取指定月份的天数(从0计数)
console.log(DateUtils.dayOfTheYear('2018-9-3'))//计算指定日期是当年第几天

使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试运行结果如下:

JavaScript日期工具类DateUtils定义与用法示例

PS:这里再为大家推荐几款比较实用的天数计算在线工具供大家使用:

在线日期/天数计算器:
http://tools.3water.com/jisuanqi/date_jisuanqi

在线日期计算器/相差天数计算器:
http://tools.3water.com/jisuanqi/datecalc

在线日期天数差计算器:
http://tools.3water.com/jisuanqi/onlinedatejsq

在线天数计算器:
http://tools.3water.com/jisuanqi/datejsq

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript 硬盘序列号+其它硬件信息
Dec 23 Javascript
javascript 按键事件(兼容各浏览器)
Dec 20 Javascript
node.js中的console用法总结
Dec 15 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
Dec 01 Javascript
详解VueJS应用中管理用户权限
Feb 02 Javascript
原生JS+HTML5实现的可调节写字板功能示例
Aug 30 Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
Nov 21 Javascript
说说Vue.js中的functional函数化组件的使用
Feb 12 Javascript
node.js中path路径模块的使用方法实例分析
Feb 13 Javascript
基于postman获取动态数据过程详解
Sep 08 Javascript
OpenLayers3实现对地图的基本操作
Sep 28 Javascript
JS绘图Flot应用图形绘制异常解决方案
Oct 16 Javascript
Angular5中状态管理的实现
Sep 03 #Javascript
JavaScript创建对象方法实例小结
Sep 03 #Javascript
vue自定义底部导航栏Tabbar的实现代码
Sep 03 #Javascript
解决vue单页路由跳转后scrollTop的问题
Sep 03 #Javascript
webpack4 SCSS提取和懒加载的示例
Sep 03 #Javascript
vue自定v-model实现表单数据双向绑定问题
Sep 03 #Javascript
详解vue-cli下ESlint 配置说明
Sep 03 #Javascript
You might like
php 接口类与抽象类的实际作用
2009/11/26 PHP
深入phpMyAdmin的安装与配置的详细步骤
2013/05/07 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
2016/03/21 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
jquery常用操作小结
2014/07/21 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
JS for...in 遍历语句用法实例分析
2016/08/24 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
2016/10/31 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
BootStrap selectpicker后台动态绑定数据的方法
2017/07/28 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
nodejs async异步常用函数总结(推荐)
2017/11/17 NodeJs
浅谈layer弹出层按钮颜色修改方法
2019/09/11 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
在Python中使用poplib模块收取邮件的教程
2015/04/29 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
利用nohup来开启python文件的方法
2019/01/14 Python
Django框架视图函数设计示例
2019/07/29 Python
利用Python制作动态排名图的实现代码
2020/04/09 Python
html5视频自动横过来自适应页面且点击播放功能的实现
2020/06/03 HTML / CSS
国际领先的学术出版商:Springer
2017/01/11 全球购物
财务人员个人求职信范文
2013/12/04 职场文书
律师授权委托书范本
2014/10/07 职场文书
商务英语求职信范文
2015/03/19 职场文书
2015年艾滋病防治工作总结
2015/05/22 职场文书
走近毛泽东观后感
2015/06/04 职场文书
蜗居观后感
2015/06/11 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
MySQL 语句执行顺序举例解析
2022/06/05 MySQL