JavaScript日期集合(今日,昨日,本周一,周末 ,月初,月末)
闲聊:新年第一天上班,看着自己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 };
总结:代码中就两难点,一是获取月末的最后一天日期,二是求 一周的开始和结束日期时间,第一点是知不知道的问题,第二点是比较今日与周末(星期天),周一各差几天,加减相差的时间戳获取相应的日期,总之说难不难,说不难可能当你在百忙之中确实要花点时间,保持清醒的头脑;
转载请注明出处:博客园(杨君华的博客)