JavaScript日期集合(今日,昨日,本周一,周末 ,月初,月末)

vuxb2092 8年前

来自: http://www.cnblogs.com/yangjunhua/p/5189014.html

闲聊: 新年第一天上班,看着自己15年年底写的代码,真心觉得很烂,因为年底没时间去写,一想着做后台管理需要获取一周的开始和结束日期,就慌了, 项目赶着测试呢,还有好多事情未做,就直接抄袭了网上的一段错误代码,其实真的很简单,今天重新花点时间封装一下,以备后用,大神勿喷,谢谢!

一、封装为jQuery版日期集合插件

jQuery.dateCollections = (function(){        var nowDate = new Date();      var cloneNowDate = new Date();        var fullYear = nowDate.getFullYear();      var month = nowDate.getMonth() + 1; // getMonth 方法返回 0-11,代表1-12月      var date = nowDate.getDate();        var endOfMonth = new Date(fullYear, month, 0).getDate(); // 获取本月最后一天        // 格式化日期 (2016-02-14)      function getFullDate(targetDate) {          var D, y, m, d;          if (targetDate) {              D = new Date(targetDate);              y = D.getFullYear();              m = D.getMonth() + 1;              d = D.getDate();          } else {              y = fullYear;              m = month;              d = date;          }          m = m > 9 ? m : '0' + m;          d = d > 9 ? d : '0' + d;            return y + '-' + m + '-' + d;      }        // 一天的时间戳(毫秒为单位)      var timestampOfDay = 1000*60*60*24;        // 今天,昨天      var fullToday = getFullDate();      var fullYesterday = getFullDate(nowDate - timestampOfDay);        var nowDay = nowDate.getDay(); // getDay 方法返回0 表示星期天      nowDay = nowDay === 0 ? 7 : nowDay;        // 本周一,本周末(星期天)      // 注:在safari下(nowDate +- 0)不会转换为时间戳,这里在nowDate前加上运算符+,手动转换时间戳运算      var fullMonday = getFullDate( +nowDate - (nowDay-1)*timestampOfDay );      var fullSunday = getFullDate( +nowDate + (7-nowDay)*timestampOfDay );        // 月初,月末      var fullStartOfMonth = getFullDate( cloneNowDate.setDate(1) );      var fullEndOfMonth = getFullDate( cloneNowDate.setDate(endOfMonth) );        return {          fullToday: fullToday,          fullYesterday: fullYesterday,          fullMonday: fullMonday,          fullSunday: fullSunday,          fullStartOfMonth: fullStartOfMonth,          fullEndOfMonth: fullEndOfMonth      };    }());

二、封装为模块,可用于webpack工具打包

var nowDate = new Date();  var cloneNowDate = new Date();    var fullYear = nowDate.getFullYear();  var month = nowDate.getMonth() + 1; // getMonth 方法返回 0-11,代表1-12月  var date = nowDate.getDate();    var endOfMonth = new Date(fullYear, month, 0).getDate(); // 获取本月最后一天    // 格式化日期 (2016-02-14)  function getFullDate(targetDate) {      var D, y, m, d;      if (targetDate) {          D = new Date(targetDate);          y = D.getFullYear();          m = D.getMonth() + 1;          d = D.getDate();      } else {          y = fullYear;          m = month;          d = date;      }      m = m > 9 ? m : '0' + m;      d = d > 9 ? d : '0' + d;        return y + '-' + m + '-' + d;  }    // 一天的时间戳(毫秒为单位)  var timestampOfDay = 1000*60*60*24;    // 今天,昨天  var fullToday = getFullDate();  var fullYesterday = getFullDate(nowDate - timestampOfDay);    var nowDay = nowDate.getDay(); // getDay 方法返回0 表示星期天  nowDay = nowDay === 0 ? 7 : nowDay;    // 本周一,本周末(星期天)  // 注:在safari下(nowDate +- 0)不会转换为时间戳,这里在nowDate前加上运算符+,手动转换时间戳运算  var fullMonday = getFullDate( +nowDate - (nowDay-1)*timestampOfDay );  var fullSunday = getFullDate( +nowDate + (7-nowDay)*timestampOfDay );    // 月初,月末  var fullStartOfMonth = getFullDate( cloneNowDate.setDate(1) );  var fullEndOfMonth = getFullDate( cloneNowDate.setDate(endOfMonth) );    module.exports = {      fullToday: fullToday,      fullYesterday: fullYesterday,      fullMonday: fullMonday,      fullSunday: fullSunday,      fullStartOfMonth: fullStartOfMonth,      fullEndOfMonth: fullEndOfMonth  };

总结: 代码中就两难点,一是获取月末的最后一天日期,二是求 一周的开始和结束日期时间,第一点是知不知道的问题,第二点 是比较今日与周末(星期天),周一各差几天,加减相差的时间戳获取相应的日期,总之说难不难,说不难可能当你在百忙之中确实要花点时间,保持清醒的头脑;

转载请注明出处:博客园(杨君华的博客)