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 学习笔记(四)
Dec 31 Javascript
jquery选择器(常用选择器说明)
Sep 28 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
Aug 25 Javascript
JS实现自动变换的菜单效果代码
Sep 09 Javascript
Javascript获取图片原始宽度和高度的方法详解
Sep 20 Javascript
js 定位到某个锚点的方法
Nov 19 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
Jul 30 Javascript
在微信小程序里使用watch和computed的方法
Aug 02 Javascript
layui动态表头的实现代码
Aug 22 Javascript
JS使用H5实现图片预览功能
Sep 30 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
May 19 Javascript
vue.js 使用原生js实现轮播图
Apr 26 Vue.js
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
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
js制作的鼠标悬浮时产生的下拉框效果
2012/10/27 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
jquery精度计算代码 jquery指定精确小数位
2017/02/06 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
[36:37]2014 DOTA2华西杯精英邀请赛5 24 VG VS iG
2014/05/25 DOTA
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
Python中的 enum 模块源码详析
2019/01/09 Python
使用 Python 遍历目录树的方法
2020/02/29 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
2015年元旦文艺汇演主持词
2014/03/26 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
财务部岗位职责
2015/02/03 职场文书
单位实习介绍信
2015/05/05 职场文书
房屋维修申请报告
2015/05/18 职场文书
政协工作总结2015
2015/05/20 职场文书
大学生村官工作心得体会
2016/01/23 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server