JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码


Posted in Javascript onDecember 05, 2018

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

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

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

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); // 本年初始时间
  var differenceVal = nowDate - initTime ; // 今天的时间减去本年开始时间,获得相差的时间
  var todayYear = Math.ceil(differenceVal/(24*60*60*1000)); // 获取今天是今年第几天
  var index = Math.ceil(todayYear/7); // 获取今天是今年第几周
  return index;
};
// 获取今天是今年的第几天
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.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

总结

以上所述是小编给大家介绍的JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript拓展DOM操作 prependChild insertAfert
Nov 17 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
Aug 14 Javascript
js判断字符长度以及中英文数字等
Dec 31 Javascript
从零学JSON之JSON数据结构
May 19 Javascript
jQuery实现图片加载完成后改变图片大小的方法
Mar 29 Javascript
jQuery 选择器(61种)整理总结
Sep 26 Javascript
javascript的document中的动态添加标签实现方法
Oct 24 Javascript
jquery精度计算代码 jquery指定精确小数位
Feb 06 Javascript
AngularJS监听路由变化的方法
Mar 07 Javascript
vue.js动画中的js钩子函数的实现
Jul 06 Javascript
JS实现的碰撞检测与周期移动完整示例
Sep 02 Javascript
vue实现导航菜单和编辑文本的示例代码
Jul 04 Javascript
JS获取月的第几周和年的第几周实例代码
Dec 05 #Javascript
JavaScript实现学生在线做题计时器功能
Dec 05 #Javascript
vue-cli3搭建项目的详细步骤
Dec 05 #Javascript
详解vue中async-await的使用误区
Dec 05 #Javascript
Vue中的基础过渡动画及实现原理解析
Dec 04 #Javascript
使用FormData实现上传多个文件
Dec 04 #Javascript
vue自定义指令的创建和使用方法实例分析
Dec 04 #Javascript
You might like
ecshop 2.72如何修改后台访问地址
2015/03/03 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
js no-repeat写法 背景不重复
2009/03/18 Javascript
jquery blockUI 遮罩不能消失与不能提交的解决方法
2011/09/17 Javascript
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
2015/03/10 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
javascript基于DOM实现权限选择实例分析
2015/05/14 Javascript
深入解析JavaScript编程中的this关键字使用
2015/11/09 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
fullpage.js全屏滚动插件使用实例
2016/09/06 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
2016/10/24 Javascript
ES6扩展运算符用法实例分析
2017/10/31 Javascript
浅谈mvvm-simple双向绑定简单实现
2018/04/18 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
原生JS实现萤火虫效果
2020/03/07 Javascript
[02:04]2020年夜魇暗潮预告片
2020/10/30 DOTA
浅谈python for循环的巧妙运用(迭代、列表生成式)
2017/09/26 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
Win8下python3.5.1安装教程
2020/07/29 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
详解Python打包分发工具setuptools
2019/08/05 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
安康杯竞赛活动总结
2014/05/05 职场文书
建筑专业毕业生自荐信
2014/05/25 职场文书
基层党支部整改方案
2014/10/25 职场文书
求职自我评价范文
2015/03/09 职场文书
公司开业的祝贺语大全(60条)
2019/07/05 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android