js 处理时间一些函数

对于前端来说 关于 时间的各种 转换是是经常遇到的问题。今天记录下,省的来回查。耽误时间。有需要的可以借鉴下。

这是在vue2 项目下 用到的。需要安装 moment

我安装的是 "moment": "^2.29.4",

npm install moment
import moment from 'moment'
// 用法 this.time = date.dateNow();   // 默认选中当天
export default class {
    //获取年月日
    static dateYear() {
        var today = new Date()
        var dd = String(today.getDate()).padStart(2, '0')
        var mm = String(today.getMonth() + 1).padStart(2, '0')
        var yyyy = today.getFullYear()
        return yyyy + '-' + mm + '-' + dd
    }

    //获取星期几
    static dateWeek() {
        var today = new Date()
        var day = today.getDay()
        var weeks = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
        return weeks[day]
    }


    //获取星期几
    static getDateWeek(today) {
        let day = new Date(today).getDay()
        let weeks = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
        return weeks[day]
    }


    //获取当前时分秒
    static dateTimeNow() {
        var today = new Date()
        var h = today.getHours()
        var m = today.getMinutes()
        var s = today.getSeconds()
        if (m < 10) m = '0' + m
        if (s < 10) s = '0' + s
        return h + ':' + m + ':' + s
    }
    //根据当前日期 获取 本月日里要用的数据
    static getCalendarData(date) {
        // 创建一个Date对象,表示给定日期  
        let dateObj = new Date(date);

        // 获取年、月、日  
        let year = dateObj.getFullYear();
        let month = dateObj.getMonth() + 1; // 月份从0开始,需要加1  
        month = month < 10 ? "0" + month : month;
        let day = dateObj.getDate();
        day = day < 10 ? "0" + day : day;

        // 格式化日期为"yyyy:mm:dd"  
        let formattedDate = `${year}-${month}-${day}`;
        let week = this.getDateWeek(formattedDate);
        let dayIdex = new Date(formattedDate).getDay()

        // 返回格式化后的日期  
        return {
            date: formattedDate,
            day: day,
            week: week,
            dayIdex: dayIdex
        };
    }


    //根据当月的第一天 获取日历所需数据
    /**
     * 
     * @param firstDay :2023-01-01 
     * @returns 
     */
    static getCalendarMonthData(firstDate) {
        let firstDateIdex = new Date(firstDate).getDay()
        let startDate = new Date(firstDate);
        startDate.setDate(startDate.getDate() - firstDateIdex);
        let year = new Date(firstDate).getFullYear();
        let month = new Date(firstDate).getMonth() + 1; // 月份从0开始,需要加1  
        let lastDay = new Date(
            new Date(year, month).valueOf() - 60 * 60 * 1000 * 24
        );
        let lastDate = year + "-" + (month >= 10 ? month : '0' + month) + "-" + lastDay.getDate() + ' 23:59:59';
        let lastDateIdex = new Date(lastDate).getDay()
        let endDate = new Date(lastDate);
        endDate.setDate(endDate.getDate() + (6 - lastDateIdex));
        const calendarData = [];
        // 循环遍历整个月  
        let currentDate = startDate;
        while (currentDate <= endDate) {
            let tmepDay = this.getCalendarData(currentDate)
            if (currentDate < new Date(firstDate)) {
                tmepDay.currentNonth = 0
            } else if (currentDate > new Date(lastDate)) {
                tmepDay.currentNonth = 2
            } else {
                tmepDay.currentNonth = 1
            }
            // 将日期添加到日历数据数组中  
            calendarData.push(tmepDay);
            // 增加一天  
            currentDate.setDate(currentDate.getDate() + 1);
        }
        let list = [];
        for (let row = 0; row < 6; row++) {
            list.push(calendarData.splice(0, 7));
        }
        return list
    }






    // 获取当天的入出时间--时间段  当天00:00:00开始 到 此刻
    static dateNow() {
        var day = new Date()
        var day1 = day.getTime()     // 获得当前时间戳

        var start = moment(day1).format('YYYY-MM-DD 00:00:00')
        var end = moment(day1).format('YYYY-MM-DD HH:mm:ss')
        var time = []
        time.push(start)
        time.push(end)
        return time
    }

    // 获取开始时间,结束时间--时间段  num是获取几天 如:1 7 30 
    static dateFun(num) {
        var day = new Date()
        var day1 = day.getTime()     // 获得当前时间戳
        var day2 = day1 - num * 24 * 60 * 60 * 1000    // 减多少天

        var start = moment(day2).format('YYYY-MM-DD HH:mm:ss')
        var end = moment(day1).format('YYYY-MM-DD HH:mm:ss')
        var time = []
        time.push(start)
        time.push(end)
        return time
    }

    static dateFun1(num) {
        var num = num * 365
        var day = new Date()
        var day1 = day.getTime()     // 获得当前时间戳
        var day2 = day1 - num * 24 * 60 * 60 * 1000 // 减多少天

        var start = moment(day2).format('YYYY-MM-DD')
        var end = moment(day1).format('YYYY-MM-DD')
        var time = []
        time.push(start)
        time.push(end)
        return time
    }

    static dateFun2(num) {
        var day = new Date()
        var day1 = day.getTime()     // 获得当前时间戳
        var day2 = day1 - num * 24 * 60 * 60 * 1000    // 减多少天

        var start = moment(day2).format('YYYY-MM-DD')
        var end = moment(day1).format('YYYY-MM-DD')
        var time = []
        time.push(start)
        time.push(end)
        return time
    }





    // 获取昨天 
    static dateY() {
        var time = (new Date).getTime() - 24 * 60 * 60 * 1000;
        var date = new Date(time);


        // 获取当前月份
        var nowMonth = date.getMonth() + 1;

        // 获取当前是几号
        var strDate = date.getDate();

        // 添加分隔符“-”
        var seperator = "-";

        // 对月份进行处理,1-9月在前面添加一个“0”
        if (nowMonth >= 1 && nowMonth <= 9) {
            nowMonth = "0" + nowMonth;
        }

        // 对月份进行处理,1-9号在前面添加一个“0”
        if (strDate >= 0 && strDate <= 9) {
            strDate = "0" + strDate;
        }

        // 最后拼接字符串,得到一个格式为(yyyy-MM-dd)的日期
        var nowDate = date.getFullYear() + seperator + nowMonth + seperator + strDate;
        // console.log(nowDate);
        var time = [nowDate + ' 00:00:00', nowDate + ' 24:00:00']
        return time
    }

    static dataChange(n) {
        var time = n;
        var timeBox = [];
        if (time == 1) {
            var timeBox = this.dateNow()
        }
        if (time == -1) {
            var timeBox = this.dateY()
        }
        if (time == 7 || time == 30) {
            var timeBox = this.dateFun(time)
        }
        return timeBox
    }



    //  没有符号的日期 转成带符号的  如:20220420000110641
    static dateStr(str) {
        let year = str.slice(0, 4)
        let month = str.slice(4, 6)
        let day = str.slice(6, 8)
        let hh = str.slice(8, 10)
        let mm = str.slice(10, 12)
        let ss = str.slice(12, 14)
        return year + '-' + month + '-' + day + ' ' + hh + ':' + mm + ':' + ss
    }

    static dateStr1(str) {
        let year = str.slice(0, 4)
        let month = str.slice(4, 6)
        let day = str.slice(6, 8)
        let hh = str.slice(8, 10)
        let mm = str.slice(10, 12)
        let ss = str.slice(12, 14)
        return month + '.' + day + ' ' + hh + ':' + mm + ':' + ss
    }

    static leftRightTime(str, num) {
        // var str = '2022-04-21 00:00:00'
        var day = new Date(str).getTime()
        var add = day + num * 24 * 60 * 60 * 1000
        var start = moment(add).format('YYYY-MM-DD HH:mm:ss')
        return start
    }

    static timeDate(str) {
        return moment(str).format("YYYY-MM-DD")
    }

    static timeDate1(timestamp) {
        return moment(parseInt(timestamp)).format('YYYY-MM-DD')
    }



    static timeToDate(timestamp, _format = 'YYYY-MM-DD HH:mm') {
        return moment(parseInt(timestamp)).format(_format)
    }

    /**
     * 
     * @param {*} date_1  YYYY-MM-DD
     * @param {*} date_2  YYYY-MM-DD
     * @returns num 工期的天数
     */
    static getDiffDay(date_1, date_2) {
        // 计算两个日期之间的差值
        let totalDays, diffDate
        let myDate_1 = Date.parse(date_1)
        let myDate_2 = Date.parse(date_2)
        // 将两个日期都转换为毫秒格式,然后做差
        diffDate = Math.abs(myDate_1 - myDate_2) // 取相差毫秒数的绝对值

        totalDays = Math.floor(diffDate / (1000 * 3600 * 24)) // 向下取整
        // console.log(totalDays)    

        return totalDays + 1    // 相差的天数
    }



}

时间不够用 注释写得不够细,有啥问题可以私信我。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

极狐GitLab x LigaAI,AI 时代研发提效新范式

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 近日&#xff0c;极狐GitLab 和 LigaAI 宣布合作&#xff0c;双…

分布式锁设计

一、为什么需要分布式锁 1.1 单体项目同步实现 在单进程&#xff08;启动一个jvm&#xff09;的系统中&#xff0c;当存在多个线程可以同时改变某个变量&#xff08;可变共享变量&#xff09;时&#xff0c;就需要对变量或代码块做同步&#xff0c;使其在修改这种变量时能够线…

vue2中props属性设置一个对象或数组的默认值

在Vue.js中&#xff0c;如果您想要为一个props属性设置一个对象或数组的默认值&#xff0c;您应该使用一个函数来返回这个默认值。这是因为对象和数组是引用类型&#xff0c;直接将它们作为默认值可能会导致预设的默认值被所有实例共享&#xff0c;这不是我们想要的结果。 下面…

zabbix 自定义模板,邮件报警,代理服务器,自动发现与自动添加及snmp

目录 一. 自定义监控内容 1. 在客户端创建自定义 key 2. 在 web 页面创建自定义监控项模块 2.1 创建模板 2.2 创建应用集 2.3 创建监控项 2.4 创建触发器 2.5 创建图形 2.6 将主机与模板关联起来 登录测试 2.7 设置邮件报警 测试邮件报警 3. nginx 服务状况的检测…

Vue中SourceMap的使用方法详解

目录 一、概述 二、使用方法 三、生成SourceMap 四、优化 五、结语 一、概述 Vue.js是一套构建用户界面的渐进式框架&#xff0c;通过HTML模板或者直接写render函数可以快速开发单页应用。在开发过程中&#xff0c;很多时候我们需要调试代码&#xff0c;追踪错误。Vue官方…

Linux:调试器 - gdb

Linux&#xff1a;调试器 - gdb gbd基本概念gbd调试浏览断点运行变量 gbd基本概念 GDB (GNU Debugger) 是一个强大的命令行调试工具,用于调试各种编程语言(如C、C、Java、Python等)编写的程序。使用 gdb可以帮助开发人员更快地定位和修复程序中的缺陷,提高代码质量和开发效率。…

Python介绍(未完)

文章目录 Python 背景知识Python 是谁创造的&#xff1f;Python 可以用来干什么&#xff1f;Python 的优缺点 搭建 Python 环境安装 Python搭建 PyCharm 环境新工具到手&#xff0c;赶紧试试中文设置第一个Python程序 Python基础语法基础语法&#xff08;1&#xff09;常量和表…

Error : java 错误 : 不支持发行版本5 ( 完美解决)

解决方案 1. 原因 idea的默认配置JDK版本与当前项目所需版本不一样 方案一&#xff08;每一个项目可能都要配置一遍&#xff09; Ctrlshitalts 打开项目结构&#xff0c;设置项目所需的JDK版本&#xff0c;本项目需要JDK8 Modules的JDK版本为5&#xff0c;这时就会报Error …

最大公约数和最小公倍数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现最大公约数函数&#xff1b; int max(int x, int y) {//初始化变量值&#xff1b;int judge 1;//运算&#xff1b;judge x %…

Ubuntu 23.10.1 nginx源码安装

注&#xff1a;以下所有命令均在root管理员模式下&#xff0c;若不是&#xff0c;请在所有命令前加sudo 1、安装依赖库 1.1、安装gcc g的依赖库 apt-get install build-essential apt-get install libtool1.2、安装pcre依赖库 apt-get update apt-get install libpcre3 lib…

剑指Offer题目笔记33(并查集)

面试题116&#xff1a; 解决方案&#xff1a; ​ 一个班级可以包含一个或多个朋友圈&#xff0c;对应的图中可能包含一个或多个子图&#xff0c;每个朋友圈对应一个子图。因此&#xff0c;这个问题可以转化为如何求图中子图的数目。图的搜索算法可以用来计算图中子图的数目。扫…

企业Linux特殊权限位/为什么会存在SUID?/企业环境测试(原理剖析)-4989字解析

企业高薪思维&#xff1a; 坚持很难&#xff0c;优秀的人才是少数&#xff0c;很重要 坚持不下去&#xff0c;问自己想要什么&#xff1f; 问问自己想要好的生活状态&#xff1f;问自己有背景吗&#xff1f;你学历是亮点吗&#xff1f;有钱没&#xff0c;你也就是一般家庭&…

selenium 下载文件取消安全下载的方法

问题描述 我要从一个网站上下载文件&#xff0c;谷歌浏览器总是自动阻止下载&#xff0c;并询问我是否保留。 可是&#xff0c;我想要的是不要询问&#xff0c;默认下载即可。 运行环境 OS: macOSselenium: 4.19.0python: 3.10.11Chrome: 124.0.6367.62selenium chromedrive…

工会排队模式:创新营销的双赢之道

工会排队模式全面解读 在当今数字化营销的大潮中&#xff0c;促销方式层出不穷&#xff0c;但能真正抓住消费者眼球并带来双方共赢的模式并不多见。而工会排队模式便是在这样的背景下崭露头角&#xff0c;它巧妙地融合了工会积分、奖金池与排队机制&#xff0c;为消费者与商家…

linux进阶篇:重定向和管道操作

Linux中的重定向和管道操作 llinux中的三种IO设备&#xff1a; 标准输入&#xff08;STDIN&#xff09;,文件描述符号为&#xff1a;0&#xff0c;默认从键盘获取输入 标准输出&#xff08;STDOUT&#xff09;,文件描述符号位&#xff1a;1&#xff0c;默认输出到显示终端 标准…

java宠物领养系统的设计与实现(springboot+mysql+源码)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的宠物领养系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于Spring Bo…

udemy视频教程下载:AI和ChatGPT提示工程精通指南

欢迎来到 ChatGPT 大师班&#xff01; 这个 ChatGPT 大师班&#xff1a;AI 和提示工程指南是您通往 AI 未来的全通道通行证。 以下是您的学习旅程&#xff1a; 理解和掌握 ChatGPT&#xff1a;您将深入了解 AI 和语言模型&#xff0c;重点是 ChatGPT。我们设计了这个部分&am…

Linux--进程间的通信-命名管道

前文&#xff1a; Linux–进程间的通信-匿名管道 Linux–进程间的通信–进程池 命名管道的概念 命名管道是一种进程间通信&#xff08;IPC&#xff09;机制&#xff0c;运行不同进程之间进行可靠的、单向或双向的数据通信。 特点和作用&#xff1a; 跨平台性&#xff1a;在W…

ue4打包多模块

首先&#xff0c;每个模块&#xff0c;包含插件内的模块在内&#xff0c;都要用IMPLEMENT_MODULE(类名, 模块名)的方式&#xff0c;模块名就是带.build.cs的第一个单词。 build.cs里就说了这个模块该怎么用&#xff0c;用c#编写。 打包中要考虑到target.cs,将工程中相应的模块…

Linux服务器磁盘满了如何清理

生产环境中&#xff0c;磁盘很容易被日志文件沾满&#xff0c;如何查找和清理呢&#xff1f; 分享一下个人的经验&#xff1a; 1.先查询到哪个磁盘占用的最多 使用命令&#xff1a;df -h 2.查询/目录下磁盘占用情况 使用命令&#xff1a;du -sh * 3.同理进入占用磁盘比较大…
最新文章