Vue + moment 实现自定义日历
moment
moment是一个js工具库,这个库中封装的是日期时间的方法,功能很全面。可以去moment官网看看,它的中文文档介绍的也很详细,主要是看一下方法的使用。附上官网地址:添加链接描述
日历案例
日历的逻辑:
从当前月出发,必须直到当前月的天数,必须知道当前月第一天是星期几。
只有知道了天数和第一天是星期几,才能知道第一天的位置在哪,要显示几天
案例中需要使用的方法:
以下方法都是在moment()返回对象身上的方法
获取当前日期和时间:moment()
获取某月的天数:daysInMonth()
获取某月的第一天:startOf(‘month’)
获取某天是星期几:weekday()
增加时间:add(Number, String)
减去时间:subtract(Number, String)
设置一周从周一开始(默认是周日开始):locale(‘zh-cn’)
显示格式:format()。这个是使用最多用处最大的方法,它的参数是令牌,令牌不同日期和时间显示不同。
我们来看下效果:
代码:
<template><div class="public-box" v-else><p>{{ titleVal }}</p><ul class="week-title flex"><li v-for="(v, i) in weekList" :key="i">{{ v }}</li></ul><ul class="date-list flex" :class="index % 2 === 0 ? 'odd' : ''" v-for="(arr, index) in dateList" :key="index + 'a'"><li :class="obj.class + ' ' + (i === arr.length - 1 ? '' : 'border-right')" v-for="(obj, i) in arr" :key="i">{{ obj.d }}</li></ul></div>
</template><script>
import moment from "moment";
// zh-cn默认一周从周一开始
// moment.locale('zh-cn');
export default {name: "CalendarDate",data() {return {weekList: ["日", "一", "二", "三", "四", "五", "六"],titleVal: '2023-09',dateList: []};},mounted() {this.setDate();},methods: {setDate() {let m = moment('2023-09-01');// 获得当前月的天数 和 第一天的星期数let curDays = this.getMonthDays(m); // 当前天数let curWeek = this.getWeekDays(m.clone()); // 当前月第一天的星期(索引值)let upDays = this.getMonthDays(m.clone().subtract(1, "month")); // 上月的天数console.log(curWeek);let currentM = moment(m).format("YYYY-MM"); // 当前月let beforeM = moment(m).subtract(1, "months").format("YYYY-MM"); // 上个月let afterM = moment(m).add(1, "months").format("YYYY-MM"); // 下个月// 生成的结构let strDate = [];// 下个月的起始日期let nextFirstDate = 0;// 日历最多有 6行 6*7let allNum = 42;for (let i = 0; i < allNum; i++) {// 1. 当前月的上一个月 需要显示的日期// 返回的索引值刚好是上月在当月显示的天数if (i < curWeek) {strDate.unshift({class: "special",d: upDays,m: beforeM});upDays--; // 倒叙显示 30 31} else if (i >= curDays + curWeek) {// 去除掉当月天数+上月天数就是下月天数// 2. 当前月的下一个月:除去当月最后一天+上月的几天剩余的是下月开始计算// curWeek 返回值刚好是上月占用的天数nextFirstDate++;strDate.push({class: "special",d: nextFirstDate,m: afterM});} else {// 3. 当前月// i-curWeek+1 为当前月的天数// date()获取日期号// m.date() == i - curWeek + 1说明这一天是当月当天,添加样式let currentClass = moment().date() === i - curWeek + 1 ? "current-day" : "current";strDate.push({class: currentClass,d: i - curWeek + 1,m: currentM});}}// strDatelet times = allNum / 7;let dateList = [];for (let k = 0; k < times; k++) {let arr = [];for (let i = 0; i < 7; i++) {arr.push(strDate[i + k * 7]);}dateList.push(arr);}if (dateList[times - 1][0]["m"] === afterM) {dateList.pop();}this.dateList = dateList;},getWeekDays(momentObj) {// 星期几,0-6, 星期天为0// 或者用 .day() 效果一样return momentObj.startOf("month").weekday();},getMonthDays(momentObj) {return momentObj.daysInMonth();}}
};
</script><style lang="scss" scoped>
.public-box {/*height: 290px;*/padding: 20px;border: 1px solid #dfdfdf;> p {color: #374256;font-weight: 500;text-align: center;margin-bottom: 10px;}.week-title {width: 100%;/*margin-bottom: 10px;*//*border-bottom: 1px solid #dfdfdf;*/li {text-align: center;line-height: 60px;font-size: 12px;flex: 1;background-color: #EAECF3;/*width: 30px;*//*margin: 0 8px;*/}}.date-list {width: 100%;margin-bottom: 3px;li {text-align: center;line-height: 80px;color: #475369;/*width: 30px;*/flex: 1;/*margin: 0 8px;*//*border-radius: 15px;*//*cursor: pointer;*/}.special {color: #b1b8c5;}}.odd {background-color: #F5F7FD;}.border-right {border-right: 1px solid #D9E1EB;}
}
</style>
相关文章:

Vue + moment 实现自定义日历
moment moment是一个js工具库,这个库中封装的是日期时间的方法,功能很全面。可以去moment官网看看,它的中文文档介绍的也很详细,主要是看一下方法的使用。附上官网地址:添加链接描述 日历案例 日历的逻辑:…...

【斗罗2】天梦哥抓捕冰帝,霍雨浩与她完美融合,喜提五挂
Hello,小伙伴们,我是小郑继续为大家深度解析斗罗大陆2绝世唐门。 斗罗大陆动画第二部绝世唐门第19集预告终于更新了,看到公布时间,大半夜才发布,着实不过瘾。不过剧情相当炸裂,天梦哥与冰帝对峙,造神计划正…...

上个月Balada Injector攻击中有超过17,000个WordPress网站被黑
导语 最近,一场名为Balada Injector的攻击活动引起了广泛关注。这次攻击以WordPress网站为目标,据统计,有超过17,000个网站受到了感染。在本文中,我们将详细介绍这次攻击的概述、攻击手段以及如何保护自己的网站。 攻击概述 Balad…...

python写一个文本处理器
gpt给的latex在xmind中有时候会多出写红色的括号在xmind中会报红,影响观感,用python写一个自动删除],[,(,)的文本处理器,并且带有图形界面,本次程序用来解决gpt发来的latex问题,: import tkinter as tkdef…...

unity发布微信小游戏,未找到 game.json报错原因
unity发布微信小游戏,未找到 game.json报错原因 同一个问题相隔一年遇到两次,两次原因都不一样,记录一下,以后不要再掉坑里 原因一:申请的appID是小程序不是小游戏 解决方法:需要在程序平台修改服务类目 如…...
mysql进程信息出现大量Waiting for table level lock信息的原因,怎么处理?
"Waiting for table level lock"的问题主要出现在MySQL处理并发读写时。这通常发生在一个长时间运行的查询(如大批量的UPDATE,DELETE或INSERT操作)在表上持有一个锁,而其他查询正在等待获取该锁。 这可能是由以下原因导…...
Ubuntu不显示共享文件夹解决方案
Ubuntu不显示共享文件夹 重装的Ubuntu系统,设置共享文件夹之后不显示,解决方法如下: 1、检查共享文件夹设置成功 vmware-hgfsclient如果设置成功会显示设置好的共享文件夹 2、一次性解决方法(每次重启都需要执行一次ÿ…...

canvas基础2 -- 形状
七巧板 七巧板本质上就是 分别由几个直线 拼成一个个图形,再将这些图形结合起来 var tangram [{ p: [{ x: 0, y: 0 }, { x: 800, y: 0 }, { x: 400, y: 400 }], color: "#caff67" },{ p: [{ x: 0, y: 0 }, { x: 400, y: 400 }, { x: 0, y: 800 }], col…...

TCP/IP(五)TCP的连接管理(二)三次握手细节
一 ISN序列号探究 本文主要探究三次握手建立TCP连接的细节备注: 某些问题探究的比较深入,当前用不到,暂时通过链接引入进来吃水不忘挖井人: 小林 coding ① 初始序列号 ISN 是如何随机产生的 ISN: 初始化序列号 Initial Sequence Number 接收方和…...
Vue Elememt 链接后端
get: //async 标记为异步请求 // get 直接获取路径并 axios.get(api/user/selectUserAll,{ params:{ "tiaoshu":this.tiaoshu, "pageSize":this.currentPage, } }) .then((res…...
XPS光电子谱峰与俄歇电子谱峰-科学指南针
在做 X 射线光电子能谱(XPS)测试时,科学指南针检测平台工作人员在与很多同学沟通中了解到,好多同学仅仅是通过文献或者师兄师姐的推荐对XPS有了解,但是对于其原理还属于小白阶段,针对此,科学指南针检测平台团队组织相关…...

STM32F4X I2C LM75
STM32F4X I2C LM75 I2C协议讲解I2C接线I2C协议波形I2C起始信号I2C停止信号I2C应答信号I2C寻址I2C地址格式 I2C数据传输 LM75ALM75A介绍LM75A引脚说明LM75A地址LM75A寄存器LM75A I2C协议写配置寄存器读配置寄存器写Tos和Thyst寄存器读Tos Thyst Temp寄存器LM75A温度计算 LM75A例…...
“华为杯”研究生数学建模竞赛2019年-【华为杯】F题:智能飞行器航迹规划模型(下)(附优秀论文及Pyhton代码实现)
目录 7.3 模型评估 7.3.1 算法的有效性和复杂度 7.3.2 灵敏度分析 8.模型的评价 8.1 模型的优点...

信息系统项目管理师第四版学习笔记——配置与变更管理
配置管理 管理基础 配置管理是为了系统地控制配置变更,在信息系统项目的整个生命周期中维持配置的完整性和可跟踪性,而标识信息系统建设在不同时间点上配置的学科。 配置项的版本号规则与配置项的状态定义相关。例如:①处于“草稿”状态的…...

代理IP端口是什么意思呢?
今天,咱们来聊聊一个小众但很有料的话题——代理IP端口,它可是你纵横互联网世界的好搭子哦! 首先,我们得先弄明白,代理IP端口是个啥? 代理IP端口就像是通往网络世界的门票,是你和代理服务器之间的桥梁。…...

如何使用ChatPPT生成PPT文档
简介 ChatPPT是一个基于人工智能的PPT生成工具,可以帮助用户快速生成高质量的PPT文档。ChatPPT使用自然语言处理技术,可以根据用户的指令生成PPT内容、设计和排版。 使用方法 ChatPPT提供了两种使用方式:在线体验版和Office插件版。 在线…...
亚马逊云科技最新分享:人、流程、工具全链路数据安全合规
数据已经是现代发明和创新之源。 企业需要人—流程—工具全链路的数据安全合规。 出品 | CSDN 云计算 端到端、全栈,是近两年我们听到云巨头亚马逊云科技提到最多的架构思路。现在,已经成为生产要素的数据,重要性被提到的非常高的高度&#x…...

Xception:使用Tensorflow从头开始实现
一、说明 近年来,卷积神经网络已成为计算机视觉领域的主要算法,开发设计它们的方法一直是相当的关注。Inception模型似乎能够用更少的参数学习更丰富的表示。它们是如何工作的,以及它们与常规卷积有何不同?本文将用tensorflow实现…...

Practical Memory Leak Detection using Guarded Value-Flow Analysis 论文阅读
本文于 2007 年投稿于 ACM-SIGPLAN 会议1。 概述 指针在代码编写过程中可能出现以下两种问题: 存在一条执行路径,指针未成功释放(内存泄漏),如下面代码中注释部分所表明的: int foo() {int *p malloc(4 …...

淘宝天猫商品历史价格API接口
获取淘宝商品历史价格接口的步骤如下: 注册淘宝开放平台:首先在淘宝开放平台上注册一个账号,并进行登录。创建应用:在淘宝开放平台上创建一个应用,并获取该应用的App Key和App Secret,用于后续的接口调用。…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...

Canal环境搭建并实现和ES数据同步
作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...

claude3.7高阶玩法,生成系统架构图,国内直接使用
文章目录 零、前言一、操作指南操作指导 二、提示词模板三、实战图书管理系统通过4o模型生成系统描述通过claude3.7生成系统架构图svg代码转换成图片 在线考试系统通过4o模型生成系统描述通过claude3.7生成系统架构图svg代码转换成图片 四、感受 零、前言 现在很多AI大模型可以…...