vue3 - 基于ts的时间转换处理的time utils

news2024/11/26 10:26:24

GitHub Demo 地址

在线预览

时间转换处理的工具类

timeUtils.ts

// 时间转换工具类

const TimeUtils = {
  Jh_getTimeStamp,
  Jh_timeStampToTime,
  Jh_convertTimeStamp,
  Jh_timeStampToYMD,
  Jh_isToday,
  Jh_getYearMonth,
  Jh_getPrevYear,
  Jh_getNextYear,
  Jh_getPrevYearMonth,
  Jh_getNextYearMonth,
  Jh_compareTimes,
  Jh_isBetweenTimes,
  Jh_isBetweenTimesByCurrent,
  Jh_isBetweenTimesByCurrentAndEndTime,
  getEndTime,
  startOfDay,
  endOfDay
}

export default TimeUtils

/**
 * 获取当前日期0点(iso格式)
 * @returns {string}
 */
export function startOfDay(isoDateStr: string): string {
  if (!isoDateStr) return ''
  return isoDateStr.substring(0, 10) + ' 00:00:00'
}

/**
 * 获取当前日期的午夜(iso格式)
 * @returns {string}
 */
export function endOfDay(isoDateStr: string): string {
  if (!isoDateStr) return ''
  return isoDateStr.substring(0, 10) + ' 23:59:59'
}

/**
 * @description: 获取当前毫秒级时间戳(13位)
 * @return {*}
 */
export function Jh_getTimeStamp(): number {
  // let timestamp2 = Date.parse(new Date())
  // const timestamp = Date.now()
  const timestamp = new Date().getTime()
  return timestamp
}

/**
 * 将某个时间戳转化成 指定格式时间
 * @param {date} time 时间  new Date().getTime()
 * @param {string} cFormat {y}-{m}-{d} {h}:{i}:{s} {w}
 */

export function Jh_timeStampToTime(time: string | number | Date, cFormat: string): string {
  if (arguments.length === 0) {
    return ''
  }
  const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
  let date: Date
  if (typeof time === 'object') {
    date = time as Date
  } else {
    if (('' + time).length === 10) time = parseInt(time as string) * 1000
    date = new Date(time)
  }

  const formatObj: any = {
    y: date.getFullYear(),
    m: date.getMonth() + 1,
    d: date.getDate(),
    h: date.getHours(),
    i: date.getMinutes(),
    s: date.getSeconds(),
    w: date.getDay()
  }
  const time_str = format.replace(/{(y|m|d|h|i|s|w)+}/g, (result, key) => {
    let value = formatObj[key]
    if (key === 'w') {
      return ['日', '一', '二', '三', '四', '五', '六'][value]
    }
    if (result.length > 0 && value < 10) {
      value = '0' + value
    }
    return value || 0
  })
  return time_str
}

/**
 * 将某个时间转化成时间戳
 * 时间格式:2019-05-20 00:00:00 或 2019年5月1日 00:00:00
 * 返回值:1556640000000,13位时间戳
 */
export function Jh_convertTimeStamp(time: string): number {
  // 用正则主要是把“2019-05-20 00:00:00”转换成“2019/05/20 00:00:00”兼容ios
  let newTime = time.replace(/-|\./g, '/')
  // console.log(newTime);
  // newTime = newTime.replace(/\./g, "-");
  newTime = newTime.replace(//g, '/')
  newTime = newTime.replace(//g, '/')
  newTime = newTime.replace(//g, '')
  if (newTime.length === 4) {
    newTime = newTime + '/01/01 00:00:00'
  }
  if (newTime.length === 7) {
    newTime = newTime + '/01 00:00:00'
  }
  if (newTime.length === 10) {
    newTime = newTime + ' 00:00:00'
  }
  if (newTime.length === 16) {
    newTime = newTime + ':00'
  }
  return Date.parse(newTime)
}

/**
 * 毫秒级时间戳(13位)转年月日,不传time默认当前时间戳
 * @param time 毫秒级时间戳(13位),不传time默认当前时间戳
 * @param format 指定format,不传format默认:'{y}/{m}/{d}'
 * @return 指定format时间,默认格式:2020/02/02
 */
export function Jh_timeStampToYMD(time?: number | null, format?: string | null) {
  time = time ? time : Jh_getTimeStamp()
  if (format) {
    return Jh_timeStampToTime(time, format)
  }
  return Jh_timeStampToTime(time, '{y}/{m}/{d}')
}

// 某个时间是否是今天 time格式:2020-07-19 20:33:00
export function Jh_isToday(time: string): boolean {
  let newTime = time.replace(/-/g, '')
  newTime = newTime.substring(0, 8)
  let currentTime: number | string = new Date().getTime()
  currentTime = Jh_timeStampToTime(currentTime, '{y}{m}{d}')
  return newTime === currentTime.toString()
}

// 获取当前年月  time格式:2020-07
export function Jh_getYearMonth(): string {
  const timestamp = new Date().getTime()
  return Jh_timeStampToTime(timestamp, '{y}-{m}')
}

// 获取 指定年的上一年 time格式:2020 | 2020年
export function Jh_getPrevYear(time: string): string {
  let tempYear: number | string = time.substring(0, 4)
  tempYear = parseInt(tempYear)
  tempYear = tempYear - 1
  const text = time.substring(4, 5)
  let prevTime = ''
  if (text === '年') {
    prevTime = tempYear + '年'
  } else {
    prevTime = tempYear + text
  }
  return prevTime
}

// 获取 指定年的下一年 time格式:2020 | 2020年
export function Jh_getNextYear(time: string): string {
  let tempYear: number | string = time.substring(0, 4)
  tempYear = parseInt(tempYear)
  tempYear = tempYear + 1
  const text = time.substring(4, 5)
  let nextTime = ''
  if (text === '年') {
    nextTime = tempYear + '年'
  } else {
    nextTime = tempYear + text
  }
  return nextTime
}

// 获取 指定年月的上一年月 time格式:2020-07 | 2020年07月
export function Jh_getPrevYearMonth(time: string): string {
  let tempYear: number | string = time.substring(0, 4)
  let tempMonth: number | string = time.substring(5, 7)
  tempYear = parseInt(tempYear)
  tempMonth = parseInt(tempMonth)
  tempMonth = tempMonth - 1
  if (tempMonth === 0) {
    tempYear = tempYear - 1
    tempMonth = 12
  }
  if (tempMonth < 10) {
    tempMonth = '0' + tempMonth
  }
  const text = time.substring(4, 5)
  let prevTime = ''
  if (text === '年') {
    prevTime = tempYear + '年' + tempMonth + '月'
  } else {
    prevTime = tempYear + text + tempMonth
  }
  return prevTime
}

// 获取 指定年月的下一年月 time格式:2020-07 | 2020年07月
export function Jh_getNextYearMonth(time: string): string {
  let tempYear: number | string = time.substring(0, 4)
  let tempMonth: number | string = time.substring(5, 7)
  tempYear = parseInt(tempYear)
  tempMonth = parseInt(tempMonth)
  tempMonth = tempMonth + 1
  if (tempMonth === 13) {
    tempYear = tempYear + 1
    tempMonth = 1
  }
  if (tempMonth < 10) {
    tempMonth = '0' + tempMonth
  }
  const text = time.substring(4, 5)
  let nextTime = ''
  if (text === '年') {
    nextTime = tempYear + '年' + tempMonth + '月'
  } else {
    nextTime = tempYear + text + tempMonth
  }
  return nextTime
}

/**
 * @param time Date/String/Number
 * @description getEndTime('2021-02-12')
 * @returns '距离2021年2月12日还有118天0小时30分12秒'
 */
export function getEndTime(time: string): string {
  var year = new Date(time).getFullYear()
  var month = new Date(time).getMonth() + 1
  var date = new Date(time).getDate()
  var now = new Date()
  var endDate = new Date(new Date(time).toLocaleDateString())
  var leftTime = endDate.getTime() - now.getTime()
  var leftsecond = parseInt((leftTime / 1000).toString())
  var day = Math.floor(leftsecond / (60 * 60 * 24))
  var hour = Math.floor((leftsecond - day * 24 * 60 * 60) / 3600)
  var minute = Math.floor((leftsecond - day * 24 * 60 * 60 - hour * 3600) / 60)
  var second = Math.floor(leftsecond - day * 60 * 60 * 24 - hour * 60 * 60 - minute * 60)
  return `距离${year}${month}${date}日还有${day}${hour}小时${minute}${second}`
}

/**
 * 判断某个时间是否在开始时间和结束时间范围内
 * @param time 2020-07-19 20:33:00 | 2020/07/19 20:33:00
 * @return true | false
 */
export function Jh_isBetweenTimes(time: string, startTime: string, endTime: string): boolean {
  time = time.replace(/-/g, '/')
  startTime = startTime.replace(/-/g, '/')
  endTime = endTime.replace(/-/g, '/')
  const time2 = new Date(time)
  const startTime2 = new Date(startTime)
  const endTime2 = new Date(endTime)
  if (startTime2 <= time2 && time2 <= endTime2) {
    return true
  }
  return false
}

/**
 * 判断当前时间是否在某个时间段内
 * @param time 2020-07-19 20:33:00 | 2020/07/19 20:33:00
 * @return true | false
 */
export function Jh_isBetweenTimesByCurrent(beginTime: string, endTime: string): boolean {
  beginTime = beginTime.replace(/-/g, '/')
  endTime = endTime.replace(/-/g, '/')
  const beginTime2 = new Date(beginTime)
  const endTime2 = new Date(endTime)
  const currentTime = new Date()
  if (beginTime2 <= currentTime && currentTime <= endTime2) {
    return true
  }
  return false
}

/**
 * 判断某个时间是否在当前时间和结束时间范围内
 * @param time 2020-07-19 20:33:00 | 2020/07/19 20:33:00
 * @return true | false
 */
export function Jh_isBetweenTimesByCurrentAndEndTime(time: string, endTime: string): boolean {
  const currentTime = new Date()
  time = time.replace(/-/g, '/')
  endTime = endTime.replace(/-/g, '/')
  const time2 = new Date(time)
  const endTime2 = new Date(endTime)
  if (currentTime <= time2 && time2 <= endTime2) {
    return true
  }
  return false
}

/**
 * 比较两个时间大小
 * @param time1 2019-02-02 || 2019-02-02 00:00:00
 * @param time2 2019-02-02 || 2019-02-02 00:00:00
 * @return time1>time2 为true
 */
export function Jh_compareTimes(time1: string, time2: string): boolean {
  const newTime1 = Jh_convertTimeStamp(time1)
  const newTime2 = Jh_convertTimeStamp(time2)
  if (newTime1 > newTime2) {
    return true // 第一个大
  } else {
    return false // 第二个大
  }
}

/*
  使用方法:

  import { Jh_getTimeStamp, Jh_timeStampToTime } from '@/utils/timeUtils2'
  import TimeUtils2 from '@/utils/timeUtils2'

  // 时间戳转指定格式时间
  TimeUtils2.Jh_timeStampToTime(1554803832, '{y}年{m}月{d}日 {h}:{i}:{s} 星期{w}')                     1487065320000
  TimeUtils2.Jh_timeStampToTime(new Date().getTime(), '{y}年{m}月{d}日 {h}:{i}:{s} 星期{w}')

  */

效果图

在这里插入图片描述

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

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

相关文章

VSCode快速设置heder和main函数

快速设置header: 点击左侧的齿轮&#xff0c;选择User Snippets&#xff1a; 在出现的选择框中输入python&#xff0c;选择python.json 在最外层的{ }内部添加以下内容 "HEADER": {"prefix": "header","body": ["# -*- encoding:…

【运维知识高级篇】超详细的Jenkins教程3(Maven项目上线全流程)

上篇文章给大家介绍了Maven编译的内容&#xff0c;讲解了用Jenkins如何去集成Maven&#xff0c;这篇文章给大家介绍另一个的Maven项目&#xff0c;实现gitlab提交代码后&#xff0c;自动进行Maven编译&#xff0c;自动推送至web主机进行代码上线的效果。 文章目录 一、主机介绍…

【操作系统笔记八】任务调度信号处理CPU上下文

任务调度 何时需要调度执行一个任务&#xff1f; 第一&#xff1a;当任务创建的时候&#xff0c;需要决定是继续执行父进程&#xff0c;还是调度执行子进程 第二&#xff1a;在一个任务退出时&#xff0c;需要做出调度决策&#xff0c;需要从 TASK_RUNNING 状态的所有任务中选…

IDEA 2019 Springboot 3.1.3 运行异常

项目场景&#xff1a; 在IDEA 2019 中集成Springboot 3.1.3 框架&#xff0c;运行异常。 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSch…

Linux ❀ 进程出现process information unavailable时的消除方法

[rootmaster ~]# jps 74963 -- process information unavailable 78678 Jps [rootmaster ~]# cd /tmp/hsperfdata_redhat/ # redhat为启动该java进程的用户ps -ef | grep $pid查找 [rootmaster hsperfdata_redhat]# ll total 32 -rw------- 1 redhat redhat 32768 Sep 27 15:…

GaussDB数据库SQL系列-游标管理

目录 一、前言 二、概述&#xff08;GaussDB&#xff09; 1、游标概述 2、游标的使用分类 三、GaussDB中的显式游标&#xff08;示例&#xff09; 1、显式游标的使用与操作步骤 2、显式游标示例 四、GaussDB中的隐式游标&#xff08;示例&#xff09; 1、隐式游标简介…

python+requests接口自动化测试框架实例详解

前段时间由于公司测试方向的转型&#xff0c;由原来的web页面功能测试转变成接口测试&#xff0c;之前大多都是手工进行&#xff0c;利用postman和jmeter进行的接口测试&#xff0c;后来&#xff0c;组内有人讲原先web自动化的测试框架移驾成接口的自动化框架&#xff0c;使用的…

通讯网关软件015——利用CommGate X2MQTT实现MQTT访问Modbus RTU

本文介绍利用CommGate X2MQTT实现MQTT访问Modbus RTU。CommGate X2MQTT是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;SCADA系统上位机、PLC、设备具备Modbus RTU通讯接口&#xff0c;现在…

缓存雪崩、缓存击穿、缓存穿透

缓存雪崩 当缓存中大量的键值对同时过期或者Redis宕机了&#xff0c;大量的请求就会直接打到数据库&#xff0c;这种现象就是缓存雪崩 应对策略 有四种&#xff0c;分别是“均匀设置过期时间”、“互斥锁”、“双key策略”、“设置逻辑过期时间&#xff0c;异步更新缓存” …

WiFi产品认证通常需要准备哪些材料

我们做WiFi产品&#xff0c;都需要做一些认证。比方说FCC、CE、SRRC等认证。 认证需要准备很多材料。通常WiFi产品的认证需要准备的材料如下&#xff1a; 认证需要准备材料

解决使用flex布局引起的变形问题

只需在变形的样式中加以下代码&#xff0c;禁止拉伸就ok了 flex-shrink: 0;

【技巧】Ubuntu临时授予用户sudo权限,并在一定时间后自动撤销

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 目录 背景说明 开始操作 at指令 背景说明 有时候普通用户需要使用sudo来执行一些操作&#xff0c;作为服务器管理员&#xff0c;需要盯着该用户使用完后再给他撤销sudo权限。当用户多起来的时候&#xff0c;这…

游戏设计模式专栏(一):工厂方法模式

引言 大家好&#xff0c;我是亿元程序员&#xff0c;一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》&#xff0c;让糟糕的代码在潜移默化中升华&#xff0c;欢迎大家关注分享收藏订阅。 在游戏开发中&#xff0c;代码的组织和结构对于项目的可…

Centos 7 部署SVN服务器

一、安装SVN 1、安装Subversion sudo yum -y install subversion2、验证是否安装成功&#xff08;查看svn版本号&#xff09; svnserve --version二、创建版本库 1、先建立目录&#xff0c;目录位置可修改 mkdir -p /var/svn cd /var/svn2、创建版本库&#xff0c;添加权限…

web前端tips:js继承——寄生式继承

上篇文章给大家分享了 js继承中的 原型式继承 web前端tips&#xff1a;js继承——原型式继承 今天给大家分享一下 js 继承中的 寄生式继承 寄生式继承 寄生式继承&#xff08;Parasitic Inheritance&#xff09;是一种基于原型式的继承方式&#xff0c;它通过创建一个仅用于…

电气专业发展到头了?

今日话题 电气专业发展到头了&#xff1f; 电气绝对不是末路专业。但是有个前提&#xff0c;不要选错行业。大土木类的&#xff0c;不管是设计还是施工&#xff0c;都不要选择。 二、电网公司。电网是绕不开的话题&#xff0c;早些年电网待遇太好&#xff0c;搞得大家都理所…

最优化问题简介

最优化问题&#xff08;也称优化问题&#xff09;泛指定量决策问题&#xff0c;主要关心如何对有限 资源进行有效分配和控制&#xff0c;并达到某种意义上的最优&#xff0e;它通常需要对需求进 行定性和定量分析&#xff0c;建立恰当的数学模型来描述该问题&#xff0c;设计合…

SI3262:国产NFC+MCU+防水触摸按键三合一SoC芯片

目录 SI3262简介特点结构框图芯片特性 SI3262简介 Si3262是高度集成ACD低功耗MCUNFC15通道防水触摸按键的SoC芯片。 其MCU模块具有低功耗、Low Pin Count、宽电压工作范围&#xff0c;集成了13/14/15/16位精度的ADC、LVD、UART、SPI、I2C、TIMER、WUP、IWDG、RTC、TSC等丰富的…

WebGL雾化

目录 前言 如何实现雾化 线性雾化公式 雾化因子关系图 根据雾化因子计算片元颜色公式 示例程序&#xff08;Fog.js&#xff09; 代码详解​编辑 详解如何计算雾化因子&#xff08;clamp()&#xff09; 详解如何计算最终片元颜色&#xff08;根据雾化因子计算片元颜色…

KongA 任意用户登录漏洞分析

KongA 简介 KongA 介绍 KongA 是 Kong 的一个 GUI 工具。GitHub 地址是 https://github.com/pantsel/konga 。 KongA 概述 KongA 带来的一个最大的便利就是可以很好地通过UI观察到现在 Kong 的所有的配置&#xff0c;并且可以对于管理 Kong 节点 漏洞成因 未设置TOKEN_SECRE…