vue项目——获取指定日期是周几和第几周的信息——表格展示

news2024/11/26 10:50:07

最近在写后台管理系统,遇到以下的要求,就是要展示 年月日和周几和第几周的情况。
在这里插入图片描述
下面记录一下用到的函数:

1.跟据日期获取第几周

//根据日期获取第几周
getWeek(dateTime) {
  let temptTime = new Date(dateTime);
  //周几
  let weekday = temptTime.getDay() || 7;
  //周1+5天=周六
  temptTime.setDate(temptTime.getDate() - weekday + 1 + 5);
  let firstDay = new Date(temptTime.getFullYear(), 0, 1);
  let dayOfWeek = firstDay.getDay();
  let spendDay = 1;
  if (dayOfWeek != 0) {
    spendDay = 7 - dayOfWeek + 1;
  }
  firstDay = new Date(temptTime.getFullYear(), 0, 1 + spendDay);
  let d = Math.ceil((temptTime.valueOf() - firstDay.valueOf()) / 86400000);
  let result = Math.ceil(d / 7);
  if (Number(result) >= 52) {
    result = 0;
  }
  return result + 1;
},

2. 跟据年月获取整个月中的周数和周几等

2.1 moment插件的引入与注册

下面用到了moment方法,因为我这边是vue-cli搭建的项目,所以是安装了moment插件,在页面上引入了moment

import moment from 'moment';

methods: {
    moment,
    ...
 }

2.2 initDate获取指定日期的周数等信息

initDate(month) {
   let weekArrayList = [
     '星期日',
     '星期一',
     '星期二',
     '星期三',
     '星期四',
     '星期五',
     '星期六',
   ];
   var weeks = []; // template中用来渲染日历的数组
   var date = {};
   var firstDay = this.moment(month, 'YYYY/M'); // 当月1号
   var week = firstDay.format('d'); // 当月1号是周几 (比如周五则week = 5)
   var start = firstDay.subtract(week, 'days'); // 日历上展示的第一个数(上个月的二十几号之类的,用于补齐日历)
   for (var i = 0; i < 6; i++) {
     var days = [];
     for (var j = 0; j < 7; j++) {
       var day = {};
       day.day = start.toObject().date; // 当前号数 22
       day.num = null; // 当前号数 22
       day.date = start.format('YYYY/M/D'); // 返回值为2021-10-22
       //星期几
       let index = new Date(day.date).getDay();
       day.week = weekArrayList[index];
       day.wk = this.getWeek(day.date);
       day.month = start.format('M'); // 当前号数对应的月份,比如日历上个月27号则day.month = 9;这个月1号day.month = 10
       day.isWeekend =
         start.format('E') === '6' || start.format('E') === '7'
           ? true
           : false; // 是否是周末,用于UI区分周末和平时的颜色
       start.add(1, 'days'); // 没循环一次日期加一天
       days.push(day);
     }
     weeks.push(days);
   }
   date.year = this.moment(month).year();
   date.month = this.moment(month, 'YYYY/M').add(0, 'month').format('M');
   date.preMonth = this.moment(month, 'YYYY/M')
     .add(-1, 'month')
     .format('YYYY/M');
   date.nextMonth = this.moment(month, 'YYYY/M')
     .add(1, 'month')
     .format('YYYY/M');
   console.log('weeks', weeks);
   return weeks;
 },

最后返回的数据结构如下:
在这里插入图片描述

2.3 上面二维数组转为一维数组的解决方法

var weeks = this.initDate(this.queryParam.date);
this.weeks = [];
weeks.forEach((row) => {
  row.forEach((item) => {
    if (
      moment(new Date(item.date)).format('YYYY-MM') ==
      this.queryParam.date
    ) {
      this.weeks.push({
        week: item.week,
        date: moment(new Date(item.date)).format('MM-DD'),
        wk: item.wk,
        num: null,
        fullDate: moment(new Date(item.date)).format('YYYY-MM-DD'),
      });
    }
  });
});

最后返回的数据结构如下:
在这里插入图片描述

3. 计算上个月的最后一天

getLastMonthDate(year, month, flag) {
  console.log(year, month, flag);
  if (month == 1 && !flag) {
    month = 12;
    year = year - 1;
  } else if (month != 1 && !flag) {
    month -= 1;
  }
  var myDate = new Date(year, month, 0);
  console.log(111, year, month, myDate);
  // var startDate = year + '-' + month + '-01 00:00:00' //上个月第一天
  var endDate = year + '/' + month + '/' + myDate.getDate(); //上个月最后一天
  return endDate;
},

函数的用法:

this.getLastMonthDate(
  Number(this.moment(this.queryParam.date).format('YYYY')),//获取检索条件中的年
  Number(this.moment(this.queryParam.date).format('M')),//获取检索条件中的月
  true,//本月的最后一天
);
this.getLastMonthDate(
  Number(this.moment(this.queryParam.date).format('YYYY')),//获取检索条件中的年
  Number(this.moment(this.queryParam.date).format('M')),//获取检索条件中的月
);
//传入第三个参数为true,就是获取本月的最后一天,否则就是获取上个月的最后一天

4. 三级表头的添加

let wkArr = [];
this.weeks.forEach((item) => {
  if (wkArr.indexOf(item.wk) == -1) {
    wkArr.push(item.wk);
  }
});
var arr = [];
wkArr.forEach((w) => {
  arr.push({
    title: 'wk' + w,
    wk: w,
    align: 'center',
    children: [],
  });
});
this.weeks.forEach((item) => {
  arr.forEach((a) => {
    if (a.wk == item.wk) {
      a.children.push({
        title: item.date,
        align: 'center',
        children: [
          {
            title: item.week,
            align: 'center',
            scopedSlots: { customRender: 'num' + item.date },
            width: 100,
          },
        ],
      });
    }
  });
});
//此时的arr就是表格中的columns数据了

最终效果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/365004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浏览器用一行JS代码导出cookies.txt,Python的requests库导入cookies格式化为字典格式

在Python进行爬虫时&#xff0c;如果仅使用requests库打开某个网页&#xff0c;requests的session.cookies保存的cookies信息少得可怜&#xff0c;有时cookies甚至是空白&#xff01;但浏览器里打开同一个网页&#xff0c;cookies信息非常详尽&#xff0c;比如浏览器的cookies保…

2023-02-22 学习记录--TS-邂逅TS(二)

TS-邂逅TS&#xff08;二&#xff09; 不积跬步&#xff0c;无以至千里&#xff1b;不积小流&#xff0c;无以成江海。&#x1f4aa;&#x1f3fb; 一、接口&#xff08;interface&#xff09; 在 ts 中&#xff0c;子类只能继承一个父类&#xff0c;不可多继承&#xff0c;但是…

2020蓝桥杯真题单词分析 C语言/C++

题目描述 小蓝正在学习一门神奇的语言&#xff0c;这门语言中的单词都是由小写英文字母组 成&#xff0c;有些单词很长&#xff0c;远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词&#xff0c;他准备不再完全记忆这些单词&#xff0c;而是根据单词中哪个字母出…

恭喜!龙蜥社区荣登 2022 科创中国“开源创新榜”

2 月 20 日&#xff0c;中国科协召开以“创新提振发展信心&#xff0c;科技激发产业活力”为主题的2023“科创中国”年度会议。会上&#xff0c;“科创中国”联合体理事长、中国工程院院士周济介绍了 2022 年系列榜单征集遴选情况&#xff0c;并与中国科协副主席、中国工程院院…

音箱上8键触摸芯片绿芯GTC08L完美替换启攀微

由工采网代理提供的韩国GreenChip电容式触摸芯片-GTC08L是GreenTouch5CTM电容式触摸传感器系列之一&#xff1b;可以在发动机运行下进行8通道电容传感&#xff1b;对电磁兼容、电磁干扰、温湿度变化、电压干扰、温度漂移、湿度漂移等都有较强的抗干扰能力。不会对CS, RS,EFT&am…

在vue3+ts的项目中,如何解决vant组件自带表单校验不生效?

问题描述&#xff1a; 点击发送验证码后&#xff0c;为了让逻辑更加严谨&#xff0c;使用了vant组件自带的表单校验&#xff0c;进行二次校验&#xff0c;防止验证码发送成功后&#xff0c;登录手机号被二次修改&#xff0c;但根据官网描述cv之后不生效&#xff0c;甚至连获取…

3年自动化测试,月薪1.2W,不敢跳槽,每天都很焦虑

在我们的身边&#xff0c;存在一个普遍现象&#xff1a;很多人从事软件测试坎&#xff0c;不计其数&#xff0c;经历的心酸难与外人道也。可是技术确难以提升、止步不前&#xff0c;薪资也只能看着别人水涨船高&#xff0c;自己却没有什么起色。虽然在公司里属于不可缺少的一员…

轮播图、阅读注册协议、网页时钟、随机点名、小米搜索框、轮播图点击切换——web APIs练习

目录 一、获取元素&#xff08;DOM&#xff09; 1. 随机轮播图案例 2. 阅读注册协议&#xff08;定时器间歇函数的应用&#xff09; 3. 轮播图定时器版 4. 网页时钟 二、事件基础&#xff08;DOM&#xff09; 1. 随机点名案例 2. 轮播图点击切换&#xff08;重点&#…

Python、Java、JavaScript、C、Go等编程语言如何实现“定时器”功能

这是CSDN平台2月推出的一个活动(活动链接为&#xff1a;CSDN 征文活动)&#xff0c;聊聊时间的话题&#xff0c;小编我也不知道有什么好聊的时间的话题&#xff0c;看了CSDN给出的部分话题上&#xff0c;有一个这样的话题&#xff0c;如何用各种编程语言实现“定时器”&#xf…

初识SpringSpring核心容器

初识Spring Spring生态&#xff1a; Spring FrameWork发展&#xff1a; Spring FrameWork系统架构&#xff1a; Spring FrameWork学习路线&#xff1a; Spring核心概念 Ioc DI 实现IoC 1、导入Spring坐标 2、定义Spring管理的类&#xff08;接口&#xff09; 3、创建spring配…

tensorflow 学习笔记(三):神经网络八股

本节内容&#xff1a; 前两节使用 Tensorflow2 的原生代码大叫神经网络。本节使用 keras 搭建神经网络&#xff08;八股&#xff1a;六步法&#xff0c;有 Sequential 和 class 两种&#xff09;。 文章目录一、搭建网络八股 sequential1.1、keras 介绍1.2、六步法搭建 keras …

Mac搭建appium+python+Android自动化环境

mac搭建appium+python+Android自动化环境 一、安装jdk二、安装Android-SDK三、配置 Android 环境四、安装Appium五、打开appium一、安装jdk 自己百度 二、安装Android-SDK 1)下载地址: http://www.android-studio.org/index.php/download 下载mac版本的dmg 2) 下载完成后…

HTTPS:让数据传输更安全

鉴于 HTTP 的明文传输使得传输过程毫无安全性可言&#xff0c;且制约了网上购物、在线转账等一系列场景应用&#xff0c;于是引入加密方案。 从 HTTP 协议栈层面来看&#xff0c;我们可以在 TCP 和 HTTP 之间插入一个安全层&#xff0c;所有经过安全层的数据都会被加密或者解密…

关于虚拟数字人你想知道的都在这里

2022年底&#xff0c;微软旗下的人工智能实验室Open AI发布的对话式大型语言模型ChatGPT聊天机器人一夜蹿红&#xff0c;5天用户量超百万&#xff0c;在各大中外媒体平台掀起了一阵热潮。也带火了人工智能相关产业&#xff0c;AI虚拟数字人就是其中之一&#xff0c;一个随着元宇…

损失函数与反向传播

一、损失函数计算实际输出和目标之间的差距为我们更新输出提供一定的依据&#xff08;反向传播&#xff09;1.nn.L1Lossimport torch from torch.nn import L1Loss inputs torch.tensor([1,2,3],dtypetorch.float) targets torch.tensor([1,2,5],dtypetorch.float) # reshape…

Docker之路(4.Docker命令大全、docker镜像命令、docker容器命令以及docker常用命令)

1.帮助命令 1.1 docker version(显示docker的版本信息) sudo docker version1.2 docker info(显示docker的系统信息&#xff0c;包括镜像和容器数量) sudo docker info1.3 --help (万能命令) sudo 命令 --help1。4 帮助文档的地址 https://docs.docker.com/engine/referenc…

纯手动搭建hadoop3.x集群记录001_搭建虚拟机_调通网络_配置静态IP_安装JDK---大数据之Hadoop3.x工作笔记0162

1.首先准备机器,172.19.126.115 172.19.126.116 172.19.126.117 我准备了3台 Windows机器 2.然后我打算在Windows机器上使用虚拟机,搭建3台Centos虚拟机来进行安装hadoop 3.这里我们的3台windows机器中的,3台linux虚拟机也使用了3个IP,分别是 172.19.126.120 172.19.126.1…

自然语言处理(NLP)之跳字(元)模型<skip-gram>与连续词袋模型<continuous bag of words>

自然语言处理(Natural Language Processing, NLP)是AI里的一个非常重要的领域&#xff0c;比如现在很火爆的ChatGPT&#xff0c;首先就需要很好的理解输入内容的意思才能够做出合理的回复。自然语言处理应用非常广泛&#xff0c;比如机器翻译、问题回答、文本语义对比、语音识别…

整合Swagger2

整合Swagger2 1、Swagger介绍 前后端分离开发模式中&#xff0c;api文档是最好的沟通方式。 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 1、及时性 (接口变更后&#xff0c;能够及时准确地通知相关前后端开发人员…

Java企业开发学习笔记(4)采用Java配置类管理Bean

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【http://t.csdn.cn/1fwEO】 文章目录一、采用Java配置类管理Bean1.1 创建子包1.2 创建杀龙任务类1.3 创建勇敢骑士类1.4 创建Spring配置类1.5 创建测试类1.6 运行测试类二、课堂练习2.1 创建救美任务类和救美骑士类2…