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 06 Javascript
js 遍历对象的属性的代码
Dec 29 Javascript
java与javascript之间json格式数据互转介绍
Oct 29 Javascript
JavaScript利用append添加元素报错的解决方法
Jul 01 Javascript
JavaScript拆分字符串时产生空字符的解决方案
Sep 26 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
Mar 02 Javascript
Vuex和前端缓存的整合策略详解
May 09 Javascript
理解 Node.js 事件驱动机制的原理
Aug 16 Javascript
element ui里dialog关闭后清除验证条件方法
Feb 26 Javascript
vue使用中的内存泄漏【推荐】
Jul 10 Javascript
JS面向对象编程实现的Tab选项卡案例详解
Mar 03 Javascript
OpenLayers3实现地图显示功能
Sep 25 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
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
使用PHP函数scandir排除特定目录
2014/06/12 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
2019/03/22 PHP
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
2014/11/19 Javascript
Jquery树插件zTree用法入门教程
2015/02/17 Javascript
jQuery实现仿淘宝带有指示条的图片转动切换效果完整实例
2015/03/04 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
js断点调试心得分享(必看篇)
2017/12/08 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
vue实现pdf导出解决生成canvas模糊等问题(推荐)
2018/10/18 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
详解小程序input框失焦事件在提交事件前的处理
2019/05/05 Javascript
vue实现简单的登录弹出框
2020/10/26 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
Python中使用hashlib模块处理算法的教程
2015/04/28 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
2016/05/17 Python
python破解zip加密文件的方法
2018/05/31 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
Django Rest framework认证组件详细用法
2019/07/25 Python
Python中Flask-RESTful编写API接口(小白入门)
2019/12/11 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
python处理写入数据代码讲解
2020/10/22 Python
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
旅游管理本科生求职信
2013/10/14 职场文书
人力资源专业推荐信
2013/11/29 职场文书
说明书范文
2014/05/07 职场文书
食品安全汇报材料
2014/08/18 职场文书
财务工作检讨书
2014/10/29 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
新娘婚礼致辞
2015/07/27 职场文书
golang import自定义包方式
2021/04/29 Golang