前端常用处理时间方法

news2024/9/26 3:19:22

项目上用到很多时间格式,写了一些处理时间的方法,也可以用第三方库,下面是我自己项目封装的一下方法,命名瞎写的,有些方法是关联的,很多没有怎么完善,记录一下,兼容ios时间问题,时间太赶没有完善,将就用下,人和程序有一个人跑就行

1fd3ec0d789208d117276c90c2316852aca46382.gif

获取当前时间戳 getTodayTomorrowTtem

export const getTodayTomorrowTtem = () => {
	return store.getters.serverTime || new Date().getTime()
}

YY-MM-DD 转时间戳 如果已经是时间戳则不操作 getTimeStamp

export const getTimeStamp = date => {
	if (!date) return ''
	if (typeof date === 'string') {
		date = date.replace(/-/g, '/')
	}
	return Date.parse(new Date(date))
}

时间戳 转 YY-MM-DD getDateFormats

export const getDateFormats = (date, format = 'YY-MM-DD') => {
	if (!date) return false
	if (typeof date === 'string') {
		date = date.replace(/-/g, '/')
	}
	return getDateFormat(new Date(date), format)
}

中国标准时间 转 YY-MM-DD getDateFormat

  • 示例:Wed Jan 04 2023 16:17:30 GMT+0800 (中国标准时间)

export const getDateFormat = (date, format = 'YY-MM-DD') => {
	let YY = date.getFullYear() + '-'
	let month = date.getMonth() + 1
	let day = date.getDate()
	let MM = month < 10 ? '0' + month + '-' : month + '-'
	let DD = day < 10 ? '0' + day : day + ''
	if (format === 'YY-MM-DD') return YY + MM + DD
	if (format === 'MM-DD') return MM + DD
	if (format === 'DD') return DD
}

转换时间格式 dateFormats

  • 示例: 2022-12-12 => 2022.12.12 或 2022-12-12 12:12:59 => 2022.12.12 12:12:59

export const dateFormats = item => {
	if (!item) return
	let date = item.split(' ')
	let createTime = date[0].replace(/-/g, '/')
	let arr = createTime.split('/')
	let i = ''
	if (date[1]) {
		i = ' ' + date[1]
	}
	return arr[0] + '.' + parseInt(Number(arr[1])) + '.' + parseInt(Number(arr[2])) + i
}

2022-12-12 转年月日多格式 getYearMonthDay


export const getYearMonthDay = (date, format) => {
	if (!date) return false
	if (typeof date === 'string') {
		date = date.replace(/-/g, '/')
	}
	return getSpecificDate(new Date(date), format)
}

中国标准时间 转年月日多格式 getSpecificDate


export const getSpecificDate = (date, format = 'YY-MM-DD') => {
	let YY = date.getFullYear() + '年'
	let MM = date.getMonth() + 1 + '月'
	let DD = date.getDate() + '日'
	if (format === 'YY-MM-DD') return YY + MM + DD
	if (format === 'MM-DD') return MM + DD
	if (format === 'DD') return DD
	if (format === 'HH:mm') return DD
	if (format === 'YY.MM.DD')
		return date.getFullYear() + '.' + (date.getMonth() + 1) + '.' + date.getDate()
}

处理时间 handleTime

  • 示例: 2023-01-04 = 周三

export const handleTime = item => {
	if (!item) return
	let createTime = item.replace(/-/g, '/')
	return week[new Date(createTime).getDay()]
}

中国标准时间 获取星期几 getWeek


const week = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']

export const getWeek = date => {
	return week[date.getDay()]
}

检测活动是否开始 checkTimeStatus

// 检测状态 0 还未开始 1 活动期间 2 结束
export const checkTimeStatus = function(beginTime, endTime, systemTime) {
	let start = getTimeStamp(beginTime)  //开始时间
	let end = getTimeStamp(endTime) //结束时间
	let now = getTimeStamp(systemTime || getTodayTomorrowTtem()) //不传默认取当前时间
        
	// 不配置
	if (!start && !end) {
		return 1
	}
	// 开始日期无
	if (!start && end) {
		return now <= end ? 1 : 2
	}

	// 结束日期无
	if (start && !end) {
		return now >= start ? 1 : 0
	}

	if (now < start) {
		// 未开始
		return 0
	} else if (now > end) {
		// 结束
		return 2
	} else {
		// 活动中
		return 1
	}
}

计算剩余小时和分钟 getTimeRemainings

export const getTimeRemainings = (item, num = 30) => {
	if (!item) return ''
	let date = getTimeStamp(item) + 60 * num * 1000 - getTodayTomorrowTtem()
	if (date < 0) return '1分钟'
	let H = parseInt(date / 1000 / 60 / 60) // 小时
	let H1 = date % (1000 * 60 * 60)
	let minute = parseInt(H1 / 1000 / 60) // 剩余分钟
	return H > 0 ? H + '小时' + minute + '分钟' : minute + '分钟'
}

计算剩余分钟 getTimeRemaining

export const getTimeRemaining = (item, text = true, num = 30) => {
	if (!item) return ''
	let date = getTimeStamp(item) + 60 * num * 1000 - getTodayTomorrowTtem()
	if (date < 0) return text ? '1分钟' : 0
	let minute = Math.ceil(date / 1000 / 60) 
	return (minute > num ? num : minute) + (text ? '分钟' : 0)
}

计算开始时间和结束时间相隔几个晚上 getCalculationDate

export const getCalculationDate = (startDate, endDate) => {
	let dete = getTimeStamp(endDate) - getTimeStamp(startDate)
	return Math.trunc(dete / 1000 / 60 / 60 / 24)
}

日期取整 deleteDate

  • 2022-06-06 12:12:36 => 2022-06-06
export const deleteDate = date => {
	return date.split(' ')[0]
}

活动倒计时 deleteDate


// 格式化时间
export const formatTime = (seconds, showDays, valueFun) => {
	// 小于等于0的话,结束倒计时
	seconds <= 0 && end()
	let [day, hour, minute, second] = [0, 0, 0, 0]
	day = parseInt(seconds / (60 * 60 * 24 * 1000))
	hour = parseInt((seconds - day * 60 * 60 * 24 * 1000) / (60 * 60 * 1000))

	let showHour = null
	if (showDays) {
		showHour = hour
	} else {
		// 如果不显示天数,将“天”部分的时间折算到小时中去
		showHour = parseInt(seconds / (60 * 60 * 1000))
	}
	minute = parseInt((seconds - day * 60 * 60 * 24 * 1000 - hour * 60 * 60 * 1000) / (60 * 1000)) // 剩余分钟
	second = parseInt(
		(seconds - day * 60 * 60 * 24 * 1000 - hour * 60 * 60 * 1000 - minute * 60 * 1000) / 1000
	)
	// 如果小于10,在前面补上一个"0"
	showHour = showHour < 10 ? '0' + showHour : showHour
	minute = minute < 10 ? '0' + minute : minute
	second = second < 10 ? '0' + second : second
	day = day < 10 ? '0' + day : day
	valueFun([day, showHour, minute, second])
}
var timer = null
// 倒计时
export const start = query => {
	let { endTime, showDays = true, valueFun } = query
	// 避免可能出现的倒计时重叠情况
	let date = getTimeStamp(endTime) - getTodayTomorrowTtem()
	clearTimer()
	console.log(date, getTimeStamp(endTime), getTodayTomorrowTtem())
	if (date <= 0) {
		valueFun(['00', '00', '00', '00'])
		return
	}
	date = Number(date)
	formatTime(date, showDays, valueFun)
	timer = setInterval(() => {
		date -= 1000
		// 发出change事件
		if (date <= 0) {
			clearInterval(timer)
			return end()
		}
		formatTime(date, showDays, valueFun)
	}, 1000)
}

// 停止倒计时
export const end = () => {
	clearTimer()
}
// 清除定时器
export const clearTimer = () => {
	console.log('清除定时器', timer)
	if (timer) {
		// 清除定时器
		clearInterval(timer)
		timer = null
	}
}

小白一个,学不动就回家养猪

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

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

相关文章

求树的直径(史上最详细,匠心之作,限时免费看)

一&#xff0c;题目SPOJ PT07Z, Longest path in a tree一.定义树上任意两节点之间最长的简单路径即为树的「直径」。二&#xff0c;解法做法 1. 两次 DFS过程:首先从任意节点y, 开始进行第一次 DFS&#xff0c;到达距离其最远的节点&#xff0c;记为 z&#xff0c;然后再从 z开…

ARM S5PV210 中断体系与外部中断实战

一、中断体系介绍 1、什么是中断 中断的发明是用来解决宏观上的并行需要的。宏观就是从整体上来看&#xff0c;多件事情都完成了。微观上的并行&#xff0c;就是指的真正的并行&#xff0c;就是精确到每一秒甚至每一刻&#xff0c;多个事情都是在同时进行的。宏观上面的并行并…

OQC与Cyxtera将量子计算应用于数据中心

牛津量子电路&#xff08;OQC&#xff09;正与云服务公司Cyxtera合作&#xff0c;在数据中心安装量子计算机&#xff0c;方便用户在其本地数据集上运行量子算法。 在葡萄牙里本举行的网络峰会上&#xff0c;牛津量子电路&#xff08;OQC&#xff09;首席执行官ILana Wisby谈到了…

【力扣经典题目】环形链表,判断链表是否有环

题目描述&#xff1a; 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链…

【Unity】新手初学Animation实现人物移动

【Unity】新手初学Animation实现人物移动 需求&#xff1a;开发影院系统&#xff0c;希望加入Avatar人物&#xff0c;在其中行走和坐下 环境&#xff1a;Unity2021.3 新手初学Animation教程&#xff1a;BV1BW41187fL Avatar人物模型资源&#xff1a;学长网盘链接分享 Animation…

【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

实习------SpringMVC 框架学习

Spring MVC 是什么 &#xff08;了解&#xff09;Spring MVC&#xff08;全称 Spring Web MVC&#xff09;是 Spring 框架提供的一款基于 MVC 模式的轻量级 Web 开发框架&#xff0c;是 Spring 为表示层&#xff08;UI&#xff09;开发提供的一整套完备的解决方案。注&#xff…

《Linux运维总结:使用旧版redis-shake2.x进行redis集群间的数据同步【方案二】》

一、redis-shake简介 redis-shake是阿里云开源的用于Redis数据迁移和过滤的工具。 Github参考&#xff1a;redis-shake简介 1.1、迁移工具对比 redis-migrate-tool redis-migrate-tool是唯品会开源的一款Redis异构集群之间的数据实时迁移工具&#xff0c;不过已经有两年没有更…

如何对【javaSE】语法阶段复习

下面是我对学习java阶段的总复习&#xff0c;我愿称之为【复习宝典】 如果你对java的部分语法阶段的知识有所困惑&#xff0c;进来看看吧&#xff01; 文章目录 目录 文章目录 一、初始java 1.1java 的由来 1.2JDK安装 1.3main方法的介绍 二、数据类型和变量 2.1数据类型 三、运…

xxljob 里面 InheritableThreadLocal详解,XxlJobContext类的详解

目录 1 需求2 XxlJobContext类3 InheritableThreadLocal 类可以做什么1 需求 在xxljob 里面,有一个地方使用到了InheritableThreadLocal类 我们先说XxlJobContext类是干什么的,里面有什么东西 2 XxlJobContext类 这个类就是一个实体类,可以理解为实体类,里面有属性,有g…

Spring Boot读取配置文件内容的三种方式

系列文章目录 Spring Boot[概述、功能、快速入门]_心态还需努力呀的博客-CSDN博客 该系列文章持续更新中~ 目录 系列文章目录 前言 一、Value 二、Environment 2.1 注入对象 2.2 调用获取属性的方法 2.3 上述两种方法对比 三、ConfigurationProperties 3.1 创建一个实…

前端工程师leetcode算法面试必备-简单的二叉树

一、前言 本难度的题目主要考察二叉树的基本概念和操作。 1、基本概念 树是计算机科学中经常用到的一种非线性数据结构&#xff0c;以分层的形式存储数据。二叉树是一种特殊的树结构&#xff0c;每个节点最多有两个子树&#xff0c;通常子树被称作“左子树”和“右子树”。 …

在结构异质的云杉林中使用机载激光扫描仪数据进行单树分割

论文题目&#xff1a;Single Tree Segmentation Using Airborne Laser Scanner Data in a Structurally Heterogeneous Spruce Forest Abstract 在这项研究中&#xff0c;我们提出了一种基于机载激光扫描的树冠表面模型 (CSM) 及其相应点云的单树分割和表征的新方法。该方法包…

AI算法工程师 | 09机器学习-概率图模型(一)概率图模型概述

目录机器学习 - 概率图模型 之 概率图模型概述1、概率图模型学习的意义2、有向图和无向图3、生成式模型与判别式模型机器学习 - 概率图模型 之 概率图模型概述 本阶段将开启 概率图模型系列 的旅程。 1、概率图模型学习的意义 从自然语言处理 NLP 的角度看&#xff1a; 在自…

前端性能优化(四):资源优化

目录 一&#xff1a;资源的压缩与合并 1.1.为什么要压缩&合并 1.2.HTML压缩&#xff1a; 1.3.CSS压缩&#xff1a; 1.4.JS 压缩与混淆&#xff1a; 1.5.CSS JS 文件合并&#xff1a; 二&#xff1a;图片格式优化 2.1.JPEG/JPG&#xff1a; 2.2.PNG&#xff1a; 2…

linux之终端里sqlite数据库的使用

一. linux下安装数据库和创建一个数据库 1.安装命令&#xff1a; (1)sudo apt-get install sqlite (2) sudo apt-get install libsqlite3-dev 2.安装完后,创建一个数据库&#xff0c;终端下输入命令 【sqlite3 数据库名字 】数据库名字以.db 结尾格式 创建数据库student.db 【 …

node.js--vm沙箱逃逸初探

前言 前几天遇到一个考察vm沙箱逃逸的题目&#xff0c;由于这个点是第一次听说&#xff0c;所以就花时间了解了解什么是沙箱逃逸。此篇文章是对于自己初学vm沙箱逃逸的学习记录&#xff0c;若记录知识有误&#xff0c;欢迎师傅们指正。 什么是沙箱 就只针对于node.js而言&am…

有关于huggingface tokenizer的text_pair

tokenizer有一个名为text pair的参数&#xff0c;这个参数在做NLI任务的时候很有用&#xff0c;因为输入不是一个single sentence&#xff0c;而是sentence pair。 但是这个参数的类型让人非常confused&#xff0c;而且同时还有一个text参数&#xff0c;让人不知道传入的sente…

Java-集合(2)

List集合 List接口是Collection接口的子接口 List集合类的元素是有序的&#xff08;添加顺序和取出顺序是一致的&#xff09;且可重复List集合类的每个元素都有对应的索引(和数组索引是一样的) List集合的常用方法 add(int index Object ele)&#xff1a;在index索引位置插…

软件供应链安全中:攻击面远超想象

| 软件供应链攻击3年飙升742% | 引人注目的软件供应链攻击正在上升。欧盟网络安全机构ENISA报告称&#xff0c;自2020年初以来&#xff0c;有组织的软件供应链攻击数量增加了4倍。Gartner认为&#xff0c;这一趋势将持续下去。在《软件工程领导者如何降低软件供应链安全风险》…