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 相关文章推荐
ExtJS4给Combobox设置列表中的默认值示例
May 02 Javascript
JS实现仿京东淘宝竖排二级导航
Dec 08 Javascript
原生Js实现简易烟花爆炸效果的方法
Mar 20 Javascript
JavaScript中constructor()方法的使用简介
Jun 05 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
May 03 Javascript
js 连续赋值的简单实现
Jun 13 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
Jan 21 Javascript
layui弹出层效果实现代码
May 19 Javascript
vue数组对象排序的实现代码
Jun 20 Javascript
ES6入门教程之let、const的使用方法
Apr 13 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
Apr 15 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
Feb 06 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
laravel框架关于搜索功能的实现
2018/03/15 PHP
PHP开发实现快递查询功能详解
2019/04/08 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
Vue实现表格中对数据进行转换、处理的方法
2018/09/06 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
vue的keep-alive用法技巧
2019/08/15 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
初步认识Python中的列表与位运算符
2015/10/12 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
python 自动批量打开网页的示例
2019/02/21 Python
由Python编写的MySQL管理工具代码实例
2019/04/09 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
Django中ORM的基本使用教程
2020/12/22 Python
仓库理货员岗位职责
2013/12/18 职场文书
幼儿园义卖活动方案
2014/01/17 职场文书
升学宴演讲稿
2014/09/01 职场文书
七年级地理教学计划
2015/01/22 职场文书
安全教育第一课观后感
2015/06/17 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android