JavaScript 之 获取当前日期的周日期范围、月日期范围

news2025/3/13 8:36:45

前言

  实际开发中,有的时候产品要求需要用到日期筛选,日期筛选又需要用的当前日期的周日期范围,也有可能上一周,下一周这样的,相对应的也就又可能是当前日期的月日期范围,上一个月、下一个月的这样的:
在这里插入图片描述
那么,代码是如何实现的呢?

代码封装

  • unil.js
/**
 * 获取本周日期范围
 */
export const getCurrWeekDate = (num = 0) => {
	// 创建一个新的 Date 对象
	let d = new Date();

	let date = d.getDate()
	let week = d.getDay()

	let firstDay = date - (week - 1) + num * 7
	d.setDate(firstDay)
	let year1 = d.getFullYear()
	let m1 = d.getMonth() + 1
	let month1 = m1 > 9 ? m1 : '0' + m1
	let date1 = d.getDate() > 9 ? d.getDate() : '0' + d.getDate()
	let firstDate = `${year1}${month1}${date1}`

	let lastDay = date + (7 - week) + num * 7
	let d2 = new Date()
	d2.setDate(lastDay)
	let year2 = d2.getFullYear()
	let m2 = d2.getMonth() + 1
	let month2 = m2 > 9 ? m2 : '0' + m2
	let date2 = d2.getDate() > 9 ? d2.getDate() : '0' + d2.getDate()
	let lastDate = `${year2}${month2}${date2}`

	return `${firstDate}~${lastDate}`
}
/**
 * 获取本月日期范围
 */
export const getCurrMonthDate = (num = 0) => {
	// 创建一个新的 Date 对象
	let date = new Date();
	let month = date.getMonth() + 1 + num
	date.setMonth(month - 1)
	let year = date.getFullYear()
	let mm = date.getMonth() + 1
	let m = mm > 9 ? mm : '0' + mm

	// 设置为每月第一天
	date.setMonth(0); // 注意这里的参数是从0开始计算的,所以要将月份-1
	// 获取本月最后一天的日期
	let lastDay = new Date(year, m, 0)
		.getDate();
	let lastDayOfMonth = lastDay > 9 ? lastDay : '0' + lastDay

	return `${year}${m}月01日~${year}${m}${lastDayOfMonth}`
}


方法中的参数num代表的是上一周还是上两周或者是下一周、下两周。

往上就是传负数,往下就是传正数;如上一周,传-1,下一周,传1,以此类推。

调用示例

这里直接基于ui设计以及代码复用将方法写一个通用方法调用:

以下调用环境是在vue2的环境中调用示例的,其他环境注意切换写法。

// 封装一个复用方法
getCurrDateText(type, num = 0) {
    let d = new Date()
    switch (type) {
        case '1': // 日
            let newDate = d.getDate() + num
            d.setDate(newDate)
            let M = d.getMonth() + 1
            let mm = M > 9 ? M : '0' + M
            let year = d.getFullYear()
            let dd = d.getDate() > 9 ? d.getDate() : '0' + d.getDate()
            this.currDate = `${year}${mm}${dd}`
            break
        case '2': // 周
            this.currDate = getCurrWeekDate(num)
            break
        case '3': // 月
            this.currDate = getCurrMonthDate(num)
            break
        case '4': // 季度
            let month = d.getMonth() + 1
            let m = month + num * 3
            d.setMonth(m)
            let newMonth = d.getMonth()
            let y = d.getFullYear()
            if (newMonth <= 3) {
                this.currDate = `${y}年01月~${y}年03月`
            } else if (newMonth <= 6) {
                this.currDate = `${y}年04月~${y}年06月`
            } else if (newMonth <= 9) {
                this.currDate = `${y}年07月~${y}年09月`
            } else {
                this.currDate = `${y}年10月~${y}年12月`
            }
            break
        default:
            break
    }
},
  • 点击上一天/上一周/上一个月/上一季度
// this.currTab 初始值为0
getLastDates() {
    let type = (this.currTab + 1).toString()
    this.dateNum--
    this.getCurrDateText(type, this.dateNum)
    // reload data...
}
  • 点击下一天/下一周/下一个月/下一季度
getNextDates() {
    let type = (this.currTab + 1).toString()
    this.dateNum++
    this.getCurrDateText(type, this.dateNum)
    // reload data...
}

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

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

相关文章

[NSSRound#18 Basic]web解析

文章目录 门酱想玩什么呢&#xff1f;Becomeroot 门酱想玩什么呢&#xff1f; 打开题目&#xff0c;加载完视频后要求我们给个游戏链接 点开评论区不难发现应该是想玩元梦之星&#xff0c;这里有个评论功能可以上传图片 我们随便输入点东西发现是插入并赋值到content元素里面 …

识别恶意IP地址的有效方法

在互联网的环境中&#xff0c;恶意IP地址可能会对网络安全造成严重威胁&#xff0c;例如发起网络攻击、传播恶意软件等。因此&#xff0c;识别恶意IP地址是保护网络安全的重要一环。IP数据云将探讨一些有效的方法来识别恶意IP地址。 IP地址查询&#xff1a;https://www.ipdata…

计算机毕业设计项目基于大数据和ALS算法实现的房源智能推荐系统

概要 目前&#xff0c;现有的房源信息不够透明化大多中介混淆市场&#xff0c;内含不为人知的商业链。有经验的租客们会通过周边房价走势和走访周边房源对比调研、筛选适合自己的房源。 同时&#xff0c;对于用户工作地点需求和各种人群类型如大学生群体&#xff0c;年轻小资&a…

单⽬相机成像过程_看这一篇就够了

单⽬相机成像过程:看这一篇就够了 附赠宝贵的全套自动驾驶学习资料&#xff1a; 资料链接 附赠宝贵的全套自动驾驶学习资料&#xff1a; 资料链接

【LeetCode热题100】54. 螺旋矩阵

一.题目要求 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 二.题目难度 中等 三.输入样例 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例…

04-java基础--流程控制语句

一、switch语句 二、循环的三种结构 流程控制语句分为三种结构&#xff1a; 顺序结构&#xff08;按代码的书写顺序执行&#xff0c;从上到下依次执行&#xff09;分支结构&#xff08;if语句、if–else语句、switch语句&#xff09;循环结构&#xff08;while、for循环、do–…

Java 设计模式系列:行为型-观察者模式

简介 观察者模式是一种行为型设计模式&#xff0c;又被称为发布-订阅&#xff08;Publish/Subscribe&#xff09;模式&#xff0c;它定义了对象之间的一对多依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都会得到通知并被自动更新。 观察者…

七月论文审稿GPT第3.2版和第3.5版:通过paper-review数据集分别微调Mistral、gemma

前言 我司第二项目组一直在迭代论文审稿GPT(对应的第二项目组成员除我之外&#xff0c;包括&#xff1a;阿荀、阿李、鸿飞、文弱等人)&#xff0c;比如 七月论文审稿GPT第1版&#xff1a;通过3万多篇paper和10多万的review数据微调RWKV七月论文审稿GPT第2版&#xff1a;用一万…

wps珠海市政府版本

功能 无广告&#xff0c;安装直接使用&#xff0c;word,excel,ppt功能齐全 步骤 双击exe文件&#xff0c;更改安装步骤即可&#xff0c;任意选择一个部门就可以了 获取资源 链接&#xff1a;https://pan.baidu.com/s/1IVfNVgLwsp5QBT2uX-yROQ?pwdme6f 提取码&#xff1a;me…

上传图片时系统提示尺寸太大无法上传?证件照怎么改kb大小?

大家好&#xff0c;相信大家网上因为各式各样的原因上传证件照的时候&#xff0c;总是会提示尺寸过大或尺寸不符合等情况&#xff0c;例如教师资格证的照片要求是&#xff1b;格式为jpg/jpeg&#xff0c;不大于200K&#xff0c;宽高为150*200像素&#xff0c;比例约为3:4。怎么…

Android 监听卫星导航系统状态及卫星测量数据变化

源码 package com.android.circlescalebar;import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import android.Manifest; import android.conte…

利用数据驱动的MEG分析方法提取fMRI静息态网络

摘要 静息态网络(RSN)的电生理基础仍存在争议。特别是&#xff0c;尚未确定一个能够同样有效解释所有静息态网络的原理性机制。虽然脑磁图(MEG)和脑电图(EEG)是确定RSN电生理基础的首选方法&#xff0c;但目前没有标准的RSN分析流程。本文比较了从MEG数据中提取RSNs的两种现有…

跨境热点!TikTok直播网络要求是什么?

TikTok直播作为一种互动性强、实时性要求高的社交媒体形式&#xff0c;对网络环境有着一系列特定的需求。了解并满足这些需求&#xff0c;对于确保用户体验、提高直播质量至关重要。本文将深入探讨TikTok直播对网络环境的要求以及如何优化网络设置以满足这些要求。 TikTok直播的…

git小白入门

git是什么 Git是一种流行的版本控制系统&#xff0c;被广泛用于软件开发中来跟踪和管理代码的变化。它是由Linus Torvalds在2005年创建的&#xff0c;最初的目的是为了更高效地管理Linux内核的开发。Git使得多人在同一个项目上工作变得更加简单&#xff0c;可以轻松合并不同开…

跨域问题经典解决方法

这里写目录标题 背景步骤m3u8文件是什么&#xff1f;&#xff1f;本地播放m3u8文件在浏览器上播放m3u8视频跨域问题什么是跨域问题&#xff1f;为什么有跨域问题&#xff1f;如何解决跨域问题&#xff1f;使用代理服务器CORS&#xff08;跨域资源共享&#xff09; 总结 背景 同…

[JavaWeb学习日记]Vue工程,springboot工程整合Mybatis,数据库索引

目录 一.Vue工程 安装NodeJS与Vue-cli Vue项目创建 启动Vue项目&#xff1a;点击npm脚本serve 改端口&#xff1a;在vue.config.js下 Vue文件组成&#xff1a;templatescriptstyle 使用element 前端服务器当前使用Ngix 主要编写的文件 二.SpringBoot的Web工程 启动带…

2024.3.15每日一题

LeetCode 卖木头块 题目链接&#xff1a;2312. 卖木头块 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你两个整数 m 和 n &#xff0c;分别表示一块矩形木块的高和宽。同时给你一个二维整数数组 prices &#xff0c;其中 prices[i] [hi, wi, pricei] 表示你可以以…

被问了N遍的效率工具!批量自动添加好友

你还在手动输入客户号码或是微信号&#xff0c;再逐一进行搜索和添加吗&#xff1f; 现在有一个工具可以帮助你完成这项重复枯燥的工作任务&#xff0c;而且&#xff0c;这个工具不仅能够帮助你批量添加微信好友&#xff0c;更有很多自动化的功能&#xff0c;让你的办公效率得…

C语言宏定义问题

C语言中&#xff0c;在定义数组时&#xff0c;因为数组长度需要是常量或者宏&#xff0c;尝试将变量按照值不同定义同一个宏的不同值&#xff0c;然后用宏来定义数组长度&#xff0c;结果发现不行。原来C的宏定义&#xff0c;是不能重复的&#xff0c;下面是ChatGPT给的答案&am…

【HyperLips:】数字人——控制嘴唇 项目源码python实现

最近受到商汤“复活”汤晓鸥的视频刺激&#xff0c;大大的amazing&#xff01;没看过的小伙伴可以自行百度&#xff0c;看了不研究一下【数字人】技术&#xff0c;都要跟时代脱轨了&#xff0c;那就以HyperLips为开篇吧。 目录 &#x1f34e;&#x1f34e;1.摘要 &#x1f3…