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 装载iframe子页面,自适应高度
Mar 20 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
Apr 26 Javascript
javascript比较两个日期相差天数的方法
Jul 23 Javascript
jQuery实现form表单元素序列化为json对象的方法
Dec 09 Javascript
js本地图片预览实现代码
Oct 09 Javascript
Vue.js bootstrap前端实现分页和排序
Mar 10 Javascript
React进阶学习之组件的解耦之道
Aug 07 Javascript
vue页面切换到滚动页面显示顶部的实例
Mar 13 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
May 27 Javascript
vue使用axios上传文件(FormData)的方法
Apr 14 Javascript
vue中格式化时间过滤器代码实例
Apr 17 Javascript
JS如何在不同平台实现多语言方式
Jul 16 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
11个PHP 分页脚本推荐
2011/08/15 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
javascript学习之闭包分析
2010/12/02 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
Javascript基础教程之while语句
2015/01/18 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
Node.js的环境安装配置(使用nvm方式)
2016/10/11 Javascript
jQuery实现弹窗居中效果类似alert()
2017/02/27 Javascript
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
详解vue-flickity的fullScreen功能实现
2020/04/07 Javascript
如何通过JS实现日历简单算法
2020/10/14 Javascript
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
[41:52]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第二场 2月22日
2021/03/11 DOTA
Python2.x版本中基本的中文编码问题解决
2015/10/12 Python
使用Python &amp; Flask 实现RESTful Web API的实例
2017/09/19 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
python自动生成证件号的方法示例
2021/01/14 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
Melissa香港官网:MDreams
2016/07/01 全球购物
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
如何防止同一个帐户被多人同时登录
2013/08/01 面试题
求职简历自荐信
2013/10/20 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
第二课堂活动总结
2014/05/07 职场文书
机关搬迁方案
2014/05/18 职场文书
贷款承诺书范文
2014/05/19 职场文书
PHP实现考试倒计时功能代码
2021/04/16 PHP
Python使用protobuf序列化和反序列化的实现
2021/05/19 Python
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python