本文原创,转载请注明出处,如果发现写的有问题欢迎指正

**目录 **

文章目录

  • JS源码
    • 获取某年某月的有多少周
    • 获取今天是今年的第几周
    • 获取今天是今年的第几天
    • 获取今天是本月第几周
    • 获取周的区间
  • 方法说明及调用示例
    • String.prototype.dateIndexInYear
    • String.prototype.weekIndexInYear
    • String.prototype.weekInMonthCount
    • String.prototype.weekIndexInMonth
    • String.prototype.getWeekRange
  • 总结

好久没有记录工作中遇到的问题,其中的原因之一应该是没有什么代表性的或者说是没有网上搜不到答案的,毕竟在大多数前端中我还是很渺小。今天写这个博客就是因为工作中遇到了问题而且网上也没有找到合适的答案,自己写了大部分代码加上借鉴了一些别人的思想,下面就步入正题:

—更新:2018-6-20 加上今天是不是周日的判断

—更新:2018-7-31 给String添加方法来实现调用,感谢Rainbow_miao的提醒。github地址:https://github.com/zancheng/weekCalculation

—更新:2019-6-5

  • .解决weekIndexInYear 获取今天是今年的第几周,没有计算今天第一天没有考虑是上一年的最后一周
  • 加入周区间范围的获取
    —更新:2019-12-24
  • .解决weekIndexInYear 判断错误

JS源码

判断规则
第一周 : 是这个月的新一周,且不在上个月最后一周内。

获取某年某月的有多少周

String.prototype.weekInMonthCount = function () {var date = new Date((new Date(this).setDate(1)) || (new Date()).setDate(1));var firstWeekDate = 1;// 默认第一周是本月1号  为了模拟本月1号是否为本月第1周的判断if (date.getDay() === 1) { // 判断1号是周一firstWeekDatek = 1;} else if (date.getDay() === 0) { // 判断1号是周日firstWeekDate = 8 - 7 + 1;} else { // 判断1号是周二至周六之间firstWeekDate = 8 - date.getDay() + 1;}date.setMonth(date.getMonth()+1);date.setDate(0);var monthHasDays = date.getDate();// 本月天数monthHasDays = date.getDate() - firstWeekDate + 1;var hasWeek = Math.ceil(monthHasDays/7); // 计算本月有几周return hasWeek;
};

获取今天是今年的第几周

String.prototype.weekIndexInYear = function () {var nowDate = new Date(this != '' ? this : new Date());var initTime = new Date(this != '' ? this : new Date());initTime.setMonth(0); // 本年初始月份initTime.setDate(1); // 本年初始时间initTime.setHours(0);initTime.setMinutes(0);initTime.setSeconds(0);nowDate.setHours(23);nowDate.setMinutes(59);nowDate.setSeconds(59);var differenceVal = nowDate - initTime ; // 今天的时间减去本年开始时间,获得相差的时间var todayYear = Math.ceil(differenceVal/(24*60*60*1000)); // 获取今天是今年第几天var firstDay = initTime.getDay(); // 获取这年的第一天是周几,因为首周可能是上一年的最后一周内var startDiff;if (firstDay === 0) {startDiff = 1;} else if (firstDay === 1) { // 第一天是周一startDiff = 0;} else {startDiff = 7 - firstDay + 1;}return Math.ceil((todayYear - startDiff)/7); // 返回今天是今年第几周
};

获取今天是今年的第几天

String.prototype.dateIndexInYear = function () {var nowDate = new Date(this != '' ? this : new Date());var initTime = new Date(this != '' ? this : new Date());initTime.setMonth(0); // 本年初始月份initTime.setDate(1); // 本年初始时间var differenceVal = nowDate - initTime ; // 今天的时间减去本年开始时间,获得相差的时间return Math.ceil(differenceVal/(24*60*60*1000));
};

获取今天是本月第几周

String.prototype.weekIndexInMonth = function () {var date = new Date(this.trim() != '' ? this : new Date());var dateStart = new Date((new Date(this.trim() != '' ? this : new Date()).setDate(1))); // 本月初var firstWeek = 1;if (dateStart.getDay() === 1) {firstWeek = 1;} else if (dateStart.getDay() === 0) {firstWeek = 8 - 7 + 1;} else {firstWeek = 8 - dateStart.getDay() + 1;}var weekIndex = 1;var c = date.getDate();if (date.getDay() === 1 && date.getDate() < 7) {weekIndex = 1;} else if (c < firstWeek ) {weekIndex = -1;} else {if (c < 7) {weekIndex = Math.ceil(c/7);} else {c =  c - firstWeek + 1;if (c%7 === 0) {if (dateStart.getDay() !== 6) {weekIndex = c/7;} else {weekIndex = c/7 + 1;}} else {weekIndex = Math.ceil(c/7);}}}return weekIndex;
};

获取周的区间

String.prototype.getWeekRange = function () {var nowDate = new Date(this.trim() != '' ? this : new Date()),week = nowDate.getDay(),weekStart,weekEnd,minDiff,maxDiff;if (week !== 0) {minDiff = 1 - week;} else {minDiff = -6;}if (minDiff >= 0) {weekStart = new Date(nowDate.setDate(nowDate.getDate() + minDiff));} else {weekStart = new Date(nowDate.setDate(nowDate.getDate() + minDiff));}nowDate = new Date(this.trim() != '' ? this : new Date()); // 重新赋值,为了取区间结束if (week !== 0) {maxDiff = 7 - week;} else {maxDiff = 0;}weekEnd = new Date(nowDate.setDate(nowDate.getDate() + maxDiff));return [dateFormat(weekStart, 'yyyy/MM/dd'), dateFormat(weekEnd, 'yyyy/MM/dd')];
}
// 时间格式化
function dateFormat (date, format) {if ((date+'').match('-')) {date=date.replace(new RegExp(/-/gm) ,"/");}date = new Date(date);var map = {"M": date.getMonth() + 1, //月份"d": date.getDate(), //日"h": date.getHours(), //小时"m": date.getMinutes(), //分"s": date.getSeconds(), //秒"q": Math.floor((date.getMonth() + 3) / 3), //季度"S": date.getMilliseconds() //毫秒};format = format.replace(/([yMdhmsqS])+/g, function(all, t){var v = map[t];if(v !== undefined){if(all.length > 1){v = '0' + v;v = v.substr(v.length-2);}return v;}else if(t === 'y'){return (date.getFullYear() + '').substr(4 - all.length);}return all;});return format;
}

方法说明及调用示例

String.prototype.dateIndexInYear

获取这一天属于今年的第多少天
默认时间是今天,调用方法示例:

'2018/10/1'.dateIndexInYear()
返回: 273

String.prototype.weekIndexInYear

获取这一天属于今年的第多少周
默认时间是今天,调用方法示例:

'2018-10-1'.weekIndexInYear()
返回: 39

String.prototype.weekInMonthCount

获取这一年的这一月的有多少周
默认时间是今天,调用方法示例:

'2018-10-1'.weekInMonthCount()
返回: 5

String.prototype.weekIndexInMonth

获取这一周属于本月第多少周
如果属于上个月,返回 -1
默认时间是今天,调用方法示例:

'2018-10-01'.weekIndexInMonth()
返回: 1

String.prototype.getWeekRange

获取这一周的区间范围,返回的是数组
默认时间是今天,调用方法示例:

'2019-06-05'.getWeekRange()
返回:  ["2019/06/03", "2019/06/09"]

总结

工作中经验积累、分享一些遇到的问题,再回头想想,感觉充实了一些。

JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天、某周的区间范围相关推荐

  1. JS获取/格式化日期(附JS获取昨日、今日、上周、本周、上月、本月方法)

    JS中处理日期时间常用Date 对象,故本文将依次按照 创建Date对象 -> 获取日期时间 -> 格式化日期时间 的顺序进行讲解,且已封装好格式化日期等方法可直接使用.若有不正请多指教. ...

  2. js获取下月时间_JS获取上月,本月,下月的开始时间与结束时间

    ``###JS获取上月,本月,下月的开始时间与结束时间(记录) //获取当天的时间 function getToday() { var date = new Date(); return date . ...

  3. js获取本月,本周,当日,时间段

    js获取当月第一天到最后一天,获取本周第一天到本周最后一天日期 // 获取当日时间getDay(Time) {console.log(Time);this.beginDateTime = this.$ ...

  4. js获取下月时间_js 获取 本周、下周、本月、下月、本季度、下季度的开始结束日期...

    js 获取 本周.上周.本月.上月.本季度.上季度的开始结束日期 /** * 获取本周.本季度.本月.上月的开始日期.结束日期 */ var now = new Date(); //当前日期 var ...

  5. js 获取当天时间,实现展示包含今天的一周时间的方法

    js 获取当天时间,实现展示包含今天的一周时间 封装获得第n天的时间数据 循环得到未来n天的时间数据 最近写了一个关于需要时间预约的项目,记录一下如何 实现未来一周数据的处理,时间的展示 封装获得第n ...

  6. JS获取上周(自然周、最近七天)、上月(自然月、最近一个月)、全年的开始和结束日期

    JS获取上周(自然周.最近七天).上月(自然月.最近一个月).全年的开始和结束日期 let now = new Date(); let nowTime = now.getTime(); //当前的时间 ...

  7. js 获取当前是这个年份的第几周+获取这周的开始和结束日期

    js获取今年第几周和获取周的开始和结束日期 获取今年第几周 周的开始和结束日期 获取今年第几周 // 页面初始时获取当前是本年第几周 function getYearWeek(a, b, c) {// ...

  8. js获取7天前,n天前的日期,7天后,n天后的日期,获取当前日期是周几

    前言: 1. js获取7天前,n天前的日期,7天后,n天后的日期,      2.获取当前日期是周几 js方法: 1.获取指定日期,传参数进去,传的是正值,则是今天之后的日期.传的负值则是今天之前的日 ...

  9. js 获取某个时间的一天前 几天前 一周前 几周前 一个月前 一年前的时间

    js 获取某个时间的一天前 几天前 一周前 几周前 一个月前 一年前的时间 1.一天前 var dateStr = new Date(); dateStr.setDate(dateStr.getDat ...

  10. js 获取当前日期(年月日时分秒周)

    js 获取当前日期(年月日时分秒周) var myDate = new Date(); var myYear = myDate.getFullYear(); // 获取当前年份 var myMonth ...

最新文章

  1. mc pe Linux服务器,MC 基岩版(PE) 服务器来了
  2. Json数据发布到Tomcat本地服务器
  3. rgb颜色判断语句_首款RGB智能指纹挂锁,既能报警还能减压,简直无锁不能
  4. 【Python】用Python实现PDF文件分割和合并
  5. linux 统计_聊聊 Linux 的内存统计
  6. 在python是什么意思_python 的 表示什么
  7. 记录接触过的开源与非开源
  8. java并行调度_java并行调度框架封装及示例
  9. illustrator插件开发指南pdf_Jenkins之pipeline开发工具
  10. webstorm 主题导入方法
  11. 五险一金 | 2020年企业社保缴费为零问题
  12. 计算机音乐制作旋律教学,旋律创作的基本规律 管窥小学音乐旋律创作教学
  13. 用DEV-C++制作狼人杀
  14. 中国石油沥青行业市场供需与战略研究报告
  15. 【021】基于springboot的党务管理系统(含管理员、用户党支部三种身份(附源码数据库)
  16. python 渲染3d模型_Python中的3D软件渲染
  17. 算法基础:k最近邻算法
  18. uniapp修改字体
  19. 基于物联网的环境调节系统(ESP32-C3+Onenet+微信小程序)
  20. 使用Synology群晖内置web station和榴莲壳发布自己的网站(三)如何访问自己服务器里的网页

热门文章

  1. adguard和adblock哪个好_世界上最高级的广告拦截程序AdGuard过滤规则分享
  2. 华为鸿蒙OS摄像头,华为放大招:首发屏下摄像头+鸿蒙OS
  3. R-2R梯形网络 DAC简易的电路
  4. 单片机-stm32-使用cdc类实现vcp(虚拟串口)
  5. 极客日报第83期:百度92年程序员因“篡改数据”被抓;运营商辟谣首批 5G 用户被抛弃;特斯拉回应上海工厂摄像头被入侵
  6. 将图片内嵌到 exe 文件中
  7. 以EV录屏为例详细讲解-录屏,开直播的全局配置
  8. vue实现购物车简单的功能-单选全选总价计算、批量删除
  9. java生成word文档(最简单)
  10. SQL 语句的类型和 用法