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 相关文章推荐
jQuery on方法传递参数示例
Dec 09 Javascript
Javascript基础教程之数组 array
Jan 18 Javascript
原生js和jQuery实现淡入淡出轮播效果
Dec 25 Javascript
JavaScript必知必会(五) eval 的使用
Jun 08 Javascript
BootStrap的table表头固定tbody滚动的实例代码
Aug 24 Javascript
收藏AngularJS中最重要的核心功能
Jul 09 Javascript
探索webpack模块及webpack3新特性
Sep 18 Javascript
vue.js系列中的vue-fontawesome使用
Feb 10 Javascript
js实现控制文件拖拽并获取拖拽内容功能
Feb 17 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
Aug 23 Javascript
原生js拖拽实现图形伸缩效果
Feb 10 Javascript
JavaScript前端实现压缩图片功能
Mar 06 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
js下函数般调用正则的方法附代码
2008/06/22 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
ext 同步和异步示例代码
2009/09/18 Javascript
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
js实现选项卡效果
2020/03/07 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
Python松散正则表达式用法分析
2016/04/29 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
便捷提取python导入包的属性方法
2018/10/15 Python
对Python 语音识别框架详解
2018/12/24 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
python dlib人脸识别代码实例
2019/04/04 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
2019/08/08 Python
python如何判断IP地址合法性
2020/04/05 Python
Python3爬虫中关于中文分词的详解
2020/07/29 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
植村秀加拿大官网:Shu Uemura加拿大
2019/09/03 全球购物
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
医药大学生求职简历的自我评价
2013/10/17 职场文书
20岁生日感言
2014/01/13 职场文书
入党积极分子学习两会心得体会范文
2014/03/17 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
致800米运动员广播稿(10篇)
2014/10/17 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
先进工作者推荐材料
2014/12/23 职场文书