前端常用的时间格式处理

import { fillZero } from '@/utils/utils'
export const shortcuts = [['最近一周', 7],['最近一个月', 30],['最近三个月', 90],['最近半年', 180],['最近一年', 365]
]/*** dateParams 获取时间对象
* @param   {Number}   value   时间戳*/
export const dateParams = (value) => {const dateObj = value ? new Date(value) : new Date()const time = dateObj.getTime()const year = dateObj.getFullYear()const month = dateObj.getMonth()const date = dateObj.getDate()const day = dateObj.getDay()return {dateObj,year,month,date,day,time}
}/*** dateStartAndLast* @param  {String}   value    时间*/
export const dateStartAndLast = (value) => {const startDate = value ? new Date(value) : new Date()startDate.setDate(1) // 第一天const endDate = new Date(startDate)endDate.setMonth(startDate.getMonth() + 1)endDate.setDate(0) // 最后一天return {// startstartDate: startDate.getDate(),startDay: startDate.getDay(),startMonth: startDate.getMonth(),startYear: startDate.getFullYear(),// endendDate: endDate.getDate(),endDay: endDate.getDay(),endMonth: endDate.getMonth(),endYear: endDate.getFullYear()}
}export const dateFormatter = (date) => {const dateObj = new Date(date)const year = `${dateObj.getFullYear()}`.padStart(4, '0')const month = `${dateObj.getMonth() + 1}`.padStart(2, '0')const day = `${dateObj.getDate()}`.padStart(2, '0')return `${year}-${month}-${day}`
}/*** dateRangeGen  近周期,把今天当作最后一天来计算,比如近一周,近一个月等* @param {Number}   period   日期(几天)* @param {Number}   time     时间戳* return ['yy-mm-dd', 'yy-mm-dd']  把今天作为最后一天往前推*/
export const dateRangeGen = (period, time) => {const end = time ? new Date(time) : new Date()const start = end - 3600 * 1000 * 24 * periodif (period === 1) {return [end, end].map(dateFormatter)}return [start, end].map(dateFormatter)
}/*** dateNaturalRangeGen  自然周期(本周,本月,上月等)* @param {Number}   period      日期(几天)* @param {Number}   time        时间戳* @param {Boolean}  isThan      大于当前,是否获取* @param {Boolean}  timestamp   返回是否为时间戳* return ['yy-mm-dd', 'yy-mm-dd'] | ['1689609600000', '1689609600000']*/
export const dateNaturalRangeGen = (period, time, isThan = false, timestamp = false) => {const { year, month, date, day } = dateParams()const end = time ? new Date(time) : new Date(year, month, isThan ? date : (date + (7 - day)))const days = isThan ? (day - 1) : (period - 1)const start = end - 3600 * 1000 * 24 * daysif (period === 1) {return [end, end].map(el => timestamp ? new Date(el).getTime() : dateFormatter(el))}return [start, end].map(el => timestamp ? new Date(el).getTime() : dateFormatter(el))
}export const pickerOptionGen = shortcuts => ({shortcuts: shortcuts.map(([text, period]) => ({text,onClick: picker => picker.$emit('pick', dateRangeGen(period))}))
})/*
时间戳转换为日期
fmt: yyyy-MM-dd hh:mm:ss
*/
export const millisecondFormatDate = (time, fmt = 'yyyy-MM-dd hh:mm:ss') => {const date = time ? new Date(time) : new Date()const o = {'M+': date.getMonth() + 1, // 月份'd+': date.getDate(), // 日'h+': date.getHours(), // 小时'm+': date.getMinutes(), // 分's+': date.getSeconds(), // 秒'q+': Math.floor((date.getMonth() + 3) / 3), // 季度'S': date.getMilliseconds() // 毫秒}if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)) }for (const k in o) {if (new RegExp('(' + k + ')').test(fmt)) { fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length))) }}return fmt
}export const getDateMapping = () => {const { year, month, date, day } = dateParams()const { endYear, endMonth, endDate } = dateStartAndLast(`${month ? year : year - 1}-${month || 12}-01`)const options = {1: { // 自定义,当前一周period: 7,time: 0},2: { // 本周,周一到当前日期前一天的23点period: day, // day,time: new Date(year, month, date)},3: { // 上周period: 7,time: new Date(year, month, date - day)},4: { // 上月period: endDate,time: new Date(endYear, endMonth, endDate)},5: { // 本月period: dateStartAndLast(`${year}-${month + 1}-01`).endDate,time: (() => {const { endYear, endMonth, endDate } = dateStartAndLast(`${year}-${month + 1}-01`)return new Date(endYear, endMonth, endDate)})()},9: { // 近一周period: 7,time: new Date(year, month, date)}}return {...options,'week': options[2],'cweek': options[1], // 自定义-本周'pweek': options[3],'pmonth': options[4]}
}export const pickerGen = shortcuts => ({shortcuts: shortcuts.map(([text, period]) => {const dateOptions = getDateMapping()const result = {'week': 'cweek' // 自定义 - 本周}[period] || periodreturn {text,onClick: picker => picker.$emit('pick', dateNaturalRangeGen(dateOptions[result].period, dateOptions[result].time))}})
})const dateShortcuts = [['本周', 'week'],['上周', 'pweek'],['上月', 'pmonth']
]export const pickerOption = pickerGen(dateShortcuts)/*getPreviousDay 获取当前日期的前一天return yy-mm-dd
*/
export const getPreviousDay = (date = new Date()) => {const resetDate = new Date(date)const previous = new Date(resetDate.getTime())previous.setDate(resetDate.getDate() - 1)return dateFormatter(previous)
}/*** diffTimeDay  时间差* @param  {Number}  startTime  开始时间戳* @param  {Number}  endTime    结束时间戳
*/
export function diffTimeDay(startTime, endTime) {const diffTime = endTime - startTime// 1天多少毫秒const daySecond = 24 * 3600 * 1000// 相差天数const day = Math.floor(diffTime / daySecond)// 1小时多少毫秒const hourSecond = 3600 * 1000// 相差小时数var dayRemainder = diffTime % daySecond // 计算天数后剩余的毫秒数var hour = Math.floor(dayRemainder / hourSecond)// 相差分钟数var hourRemainder = dayRemainder % hourSecond // 计算小时数后剩余的毫秒数var minute = Math.floor(hourRemainder / (60 * 1000))// 相差秒数var minuteRemainder = hourRemainder % (60 * 1000) // 计算分钟数后剩余的毫秒数var second = Math.round(minuteRemainder / 1000)return {day,hour,minute,second}
}/*** 日期过滤器* @param   {String}  dateString* @returns {String}*/
export function dateFilter(dateString) {const noTime = ['0000-00-00 0:0:0', '0000-00-00 00:00:00', '0001-1-1 0:0:0', '0001-1-1 00:00:00', '0001-01-01 0:0:0', '0001-01-01 00:00:00', '0000-00-00', '0001-01-01'].includes(dateString)if (noTime || !dateString && dateString !== 0) {return '-'}return dateString
}export function parseTime(time, cFormat) {if (arguments.length === 0) {return null}const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'let dateif (typeof time === 'object') {date = time} else {if (('' + time).length === 10) time = parseInt(time) * 1000date = new Date(time)}const formatObj = {y: date.getFullYear(),m: date.getMonth() + 1,d: date.getDate(),h: date.getHours(),i: date.getMinutes(),s: date.getSeconds(),a: date.getDay()}const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {let value = formatObj[key]// Note: getDay() returns 0 on Sundayif (key === 'a') {return ['日', '一', '二', '三', '四', '五', '六'][value]}if (result.length > 0 && value < 10) {value = '0' + value}return value || 0})return time_str
}/*** hasDateBeenFormatted 格式化数据 判断是否含有year, month, day* @param  {String}  format  数据格式*/export const hasDateBeenFormatted = (format = 'yy-mm-dd hh:mm:ss') => {const result = format.toLocaleLowerCase()return {hasYear: result.includes('yy'),hasMonth: result.includes('-mm'),hasDay: result.includes('-dd'),hasHour: result.includes('hh'),hasMinute: result.includes(':mm'),hasSecond: result.includes(':ss')}
}/*** formatDate 时间戳转化为年月日* @param {Number} time* @param {Sting} format* @returns*/
export const formatDate = (time, format = 'YY-MM-DD') => {if (time < 0 || !time) {return []}const data = new Date(time)const year = data.getFullYear()const month = data.getMonth() + 1const day = data.getDate()const hour = data.getHours()const minute = data.getMinutes()const second = data.getSeconds()const { hasYear, hasMonth, hasDay, hasHour, hasMinute, hasSecond } = hasDateBeenFormatted(format)return {...hasYear && year ? { year } : {},...hasMonth && month ? { month: fillZero(month) } : {},...hasDay && day ? { day: fillZero(day) } : {},...hasHour && hour ? { hour: fillZero(hour) } : {},...hasMinute && minute ? { minute: fillZero(minute) } : {},...hasSecond && second ? { second: fillZero(second) } : {}}
}/*** converTimeObjectToString  将时间对象转换为字符串* @param {String} time  时间*/export const converTimeObjectToString = (time, format = 'YY-MM-DD') => {const data = formatDate(time, format)const arrData = Object.keys(data)const dataLen = arrData.length - 1return arrData.reduce((acc, cur, index) => {const symbol = index < 2 ? '-' : index === 2 || index === dataLen ? ' ' : ':'return (acc += `${data[cur]}${symbol}`)}, '')
}/*** converTimeStringToWeekArray  将时间字符串转换为周数组* @param {String} time  时间*/
export const converTimeStringToWeekArray = time => {const data = new Date(time)const timesStamp = data.getTime()const currentDay = data.getDay()return Array.from(new Array(7), (value, index) => index).reduce((acc, cur) => [...acc,...[new Date(timesStamp + 24 * 60 * 60 * 1000 * (cur - (currentDay + 7) % 7)).toLocaleDateString().replace(/\//g, '-').replace(/(\d+)/g, $1 => fillZero($1))]], [])
}

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

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

相关文章

详讲api网关之kong的基本概念及安装和使用(一)

什么是api网关 前面我们聊过sentinel&#xff0c;用来限流熔断和降级&#xff0c;如果你只有一个服务&#xff0c;用sentinel自然没有问题&#xff0c;但是如果是有多个服务&#xff0c;特别是微服务的兴起&#xff0c;那么每个服务都使用sentinel就给系统维护带来麻烦。那么网…

计数指针:shared_ptr (共享指针)与函数 笔记

推荐B站视频&#xff1a; 4.shared_ptr计数指针_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL?p4&vd_sourcea934d7fc6f47698a29dac90a922ba5a3 5.shared_ptr与函数_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL?p5&vd_sourcea…

11Docker数据持久化

Docker数据持久化 容器中数据持久化主要有两种方式&#xff1a; 数据卷&#xff08;Data Volumes&#xff09;数据卷容器&#xff08;Data Volumes Dontainers&#xff09; 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录&#xff0c;可以绕过UFS&#xff08;Unix F…

YOLOV5目标检测---labelimg图片标注工具(1)

前言&#xff1a;在使用YOLO训练自己模型的时候首先要学会对数据进行处理&#xff0c;这里介绍一个常用的本地打标签工具labelimg&#xff0c;如果不想按照的话也可以使用在线标签工具&#xff0c;因为害怕数据泄露&#xff0c;所以本人一直使用的是本地工具进行打标签。在线标…

node.js漏洞总结

js开发的web应用和php/Java最大的区别就是js可以通过查看源代码的方式查看到编写的代码&#xff0c;但是php/Java的不能看到&#xff0c;也就是说js开发的web网页相当于可以进行白盒测试。 流行的js框架有&#xff1a; 1. AngularJS 2. React JS 3. Vue 4. jQuery 5. Backbone…

ppt作品展示能用二维码吗?文件二维码内容可替换怎么做?

当我们需要将自己的作品或者内容做成ppt文件之后&#xff0c;用二维码的方式来做展示&#xff0c;而且生成二维码还可以在图案不变的情况下&#xff0c;能够修改或者替换文件内容&#xff0c;实现二维码的长期使用。在遇到这种要求时&#xff0c;如何生成这种类型的二维码图片呢…

扫雷游戏——数组和函数实现

扫雷游戏的功能说明 使⽤控制台实现经典的扫雷游戏 游戏可以通过菜单实现继续玩或者退出游戏扫雷的棋盘是9*9的格⼦ 默认随机布置10个雷可以排查雷如果位置不是雷&#xff0c;就显⽰周围有⼏个雷如果位置是雷&#xff0c;就炸死游戏结束把除10个雷之外的所有⾮雷都找出来&…

CSS--样式穿透

样式穿透具体可分为css、less以及scss&#xff0c;语法不同&#xff0c;具体语法如下所示。 css样式穿透&#xff1a; <style scoped>父元素 >>> 子元素 {color: red;} </style> less样式穿透&#xff1a; <style lang"less" scoped>父…

HFSS实战(三)——过孔via TDR仿真

文章目录 一、模型的处理二、TDR仿真2.1 修改求解模式2.2增加求解设置 三、查看仿真结果3.1 查看TDR结果3.2 查看S参数结果 四、结果分析4.1上升时间tr对仿真的影响 附&#xff1a;工程链接 在上一讲中&#xff0c;主要是通过观察S参数确定via的优化是否达到目标。但S参数只能看…

k8s 安全机制

k8s的安全机制&#xff1a; 核心&#xff1a;分布式集群管理工具&#xff0c;就是容器编排&#xff0c;安全机制的核心&#xff1a;API server 作为整个集群内部通信的中介&#xff0c;也是外控控制的入口。实验的安全机制都是围绕api server来进行设计&#xff1a; 请求api资…

利用nginx宝塔免费防火墙实现禁止国外IP访问网站

本章教程&#xff0c;主要介绍&#xff0c;如何利用nginx宝塔面板中的插件免费防火墙&#xff0c;实现一键禁止国外IP访问网站。 目录 一、安装宝塔插件 二、 开启防火墙 一、安装宝塔插件 在宝塔面板中的软件商店&#xff0c;搜索防火墙关键词&#xff0c;找到Nginx免费防火…

myql入门

目录 安装修改密码学习资料个人git仓库文章视频官网 安装 #移除以前的mysql相关 sudo apt remove --purge mysql-\* #安装mysql sudo apt install mysql-server mysql-client #查看是否启动 systemctl status mysql #手动启动 systemctl start mysql #查看mysql版本 mysql --v…

(Unity)C#的预处理器指令和条件编译符号

C#的预处理器指令 预处理指令主要用于控制编译器的编译过程。它们在编译时被处理&#xff0c;而不是在运行时。这意味着预处理指令可以用来使编译器只编译满足特定条件的代码&#xff0c;或者在编译时输出特定的警告或错误。 #define&#xff1a;定义一个符号。#undef&#xff…

在线教育系统开发:构建现代化学习平台

随着科技的迅速发展&#xff0c;在线教育系统在教育领域扮演着越来越重要的角色。本文将深入探讨在线教育系统的开发过程&#xff0c;涉及关键技术和代码实现。 技术选型 在开始开发之前&#xff0c;我们首先需要选择适合在线教育系统的技术栈。以下是一些常见的技术选项&am…

常见的持久层框架包括

常见的持久层框架包括&#xff1a; Hibernate&#xff1a;Hibernate是Java的关系数据库持久化框架&#xff0c;通过对象关系映射&#xff08;ORM&#xff09;将对象和关系数据库进行映射。Hibernate提供了丰富的功能和灵活的查询语言&#xff0c;适用于复杂的数据模型和关系查询…

一些常用的数据备份脚本

Elasticsearch备份 #!/bin/shtodaydate %Y%m%dcurl --location --request PUT http://localhost:22063/_snapshot/es_bak --header Content-Type: application/json --data-raw {"type": "fs","settings":{"compress": true,"lo…

代码随想录算法训练营29期|day31 任务以及具体安排

理论基础 关于贪心算法&#xff0c;你该了解这些&#xff01; 题目分类大纲如下&#xff1a; #算法公开课 《代码随想录》算法视频公开课 (opens new window)&#xff1a;贪心算法理论基础&#xff01; (opens new window),相信结合视频再看本篇题解&#xff0c;更有助于大家…

tdesign的使用记录

1、复杂表单校验 复杂类型的数据&#xff08;两级数组&#xff09; const dataForm ref({configTalkTemplateProblemCoList: [{"id":"1744302859557920769","templateId":"1744302859511783426","parentId":null,"l…

大创项目推荐 题目:基于LSTM的预测算法 - 股票预测 天气预测 房价预测

文章目录 0 简介1 基于 Keras 用 LSTM 网络做时间序列预测2 长短记忆网络3 LSTM 网络结构和原理3.1 LSTM核心思想3.2 遗忘门3.3 输入门3.4 输出门 4 基于LSTM的天气预测4.1 数据集4.2 预测示例 5 基于LSTM的股票价格预测5.1 数据集5.2 实现代码 6 lstm 预测航空旅客数目数据集预…

IO多路复用-epoll

IO多路复用-epoll 1. 概述 epoll 全称 eventpoll&#xff0c;是 linux 内核实现IO多路转接/复用&#xff08;IO multiplexing&#xff09;的一个实现。 epoll是select和poll的升级版&#xff0c;相较于这两个前辈&#xff0c;epoll改进了工作方式&#xff0c;因此它更加高效…