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 相关文章推荐
Extjs学习笔记之一 初识Extjs之MessageBox
Jan 07 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
Jul 13 Javascript
Javascript基础教程之变量
Jan 18 Javascript
jQuery中on()方法用法实例详解
Feb 06 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
Aug 23 Javascript
JS匿名函数实例分析
Nov 26 Javascript
基于Bootstrap的网页设计实例
Mar 01 Javascript
jQuery的$.extend 浅拷贝与深拷贝
Mar 08 Javascript
详解AngularJS2 Http服务
Jun 26 Javascript
关于Vue.nextTick()的正确使用方法浅析
Aug 25 Javascript
Layui表格行工具事件与数据回填方法
Sep 13 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
Nov 07 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面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
浅析php原型模式
2014/11/25 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
PHP PDOStatement::fetchColumn讲解
2019/01/31 PHP
用函数式编程技术编写优美的 JavaScript_ibm
2008/05/16 Javascript
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
微信小程序云开发之使用云数据库
2019/05/17 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
[04:13]2018国际邀请赛典藏宝瓶Ⅱ饰品一览
2018/07/21 DOTA
Python多进程编程技术实例分析
2014/09/16 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
基于pip install django失败时的解决方法
2018/06/12 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
如何基于python生成list的所有的子集
2019/11/11 Python
Python定义一个函数的方法
2020/06/15 Python
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
医科大学生毕业的自我评价分享
2013/11/12 职场文书
护理个人求职信范文
2014/01/08 职场文书
小学教研工作制度
2014/01/15 职场文书
生日寿宴答谢词
2014/01/19 职场文书
素质拓展感言
2014/01/29 职场文书
中职生自荐信范文
2014/06/15 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书
Python连续赋值需要注意的一些问题
2021/06/03 Python
MySQL索引失效的典型案例
2021/06/05 MySQL
python超详细实现完整学生成绩管理系统
2022/03/17 Python
MySQL解决Navicat设置默认字符串时的报错问题
2022/06/16 MySQL
Win11如何默认打开软件界面最大化?Win11默认打开软件界面最大化的方法
2022/07/15 数码科技