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 相关文章推荐
XMLHTTPRequest的属性和方法简介
Nov 23 Javascript
Egret引擎开发指南之视觉编程
Sep 03 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
Sep 05 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
Dec 19 Javascript
javascript常用经典算法详解
Jan 11 Javascript
一步步教你利用Canvas对图片进行处理
Sep 19 Javascript
vue使用axios时关于this的指向问题详解
Dec 22 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
Nov 26 Javascript
解决layui页面按钮点击无反应,也不报错的问题
Sep 29 Javascript
微信小程序监听用户登录事件的实现方法
Nov 11 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
Aug 31 Javascript
如何利用node转发请求详解
Sep 17 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函数(ignore_user_abort)
2012/08/01 PHP
探讨如何把session存入数据库
2013/06/07 PHP
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
2015/12/31 PHP
php is_writable判断文件是否可写实例代码
2016/10/13 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
jquery 日期分离成年月日的代码
2010/05/14 Javascript
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
jQuery中focus事件用法实例
2014/12/26 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
jQuery点击其他地方时菜单消失的实现方法
2016/04/22 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
web前端页面生成exe可执行文件的方法
2018/02/08 Javascript
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
Vuex中的State使用介绍
2019/01/19 Javascript
Vue.js下拉菜单组件使用方法详解
2019/10/19 Javascript
Element MessageBox弹框的具体使用
2020/07/27 Javascript
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
Python中模块string.py详解
2017/03/12 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
python scatter函数用法实例详解
2020/02/11 Python
python输出pdf文档的实例
2020/02/13 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
一些Solaris面试题
2015/12/22 面试题
俄语专业毕业生推荐信
2013/10/28 职场文书
学校班班通实施方案
2014/06/11 职场文书
2014年人事科工作总结
2014/11/19 职场文书
2014年建筑工作总结
2014/11/26 职场文书
2014年教务处工作总结
2014/12/03 职场文书
实习班主任自我评价
2015/03/11 职场文书
python Tkinter的简单入门教程
2021/04/11 Python
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技
python 单机五子棋对战游戏
2022/04/28 Python