欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-08-20 23:45:08
本文实例讲述了javascript日期工具类dateutils定义与用法。分享给大家供大家参考,具体如下: dateutils = { patterns:...

本文实例讲述了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.jb51.net/code/htmljsrun测试运行结果如下:

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

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

在线日期/天数计算器:

在线日期计算器/相差天数计算器:

在线日期天数差计算器:

在线天数计算器:

更多关于javascript相关内容感兴趣的读者可查看本站专题:《javascript时间与日期操作技巧总结》、《javascript+html5特效与技巧汇总》、《javascript错误与调试技巧总结》、《javascript数据结构与算法技巧总结》及《javascript数学运算用法总结

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