前端中不同格式的日期相互转换(字符串、时间戳)js相关

在项目中遇到了,需要实现字符串和Unix时间戳的相互转换,随手记录一下。
我使用的组件库为Naive UI,涉及到的组件为日期选择器(Date Picker)。作者在文档中写道:

实话说我不喜欢这个 feature,因为多数情况下,传递时间字符串不是个最佳实践。但是现实世界是复杂的,我希望这个功能能帮你解决一些棘手的问题,比如为了后端传过来的数据买账。

事实也确实如此,那今天就来倒腾倒腾这些和日期有关的东西吧!

部分内容来自
Day.js中文网
Naive UI

一、字符串—>Unix时间戳(毫秒)

(一)使用Date.parse()

Date.parse() 方法解析一个表示某个日期的字符串,并返回从 1970-1-1 00:00:00 UTC 到该日期对象(该日期对象的 UTC 时间)的毫秒数,如果该字符串无法识别,或者一些情况下,包含了不合法的日期数值(如:2015-02-31),则返回值为 NaN。

const str = '2023-10-8'
const ttmp = Date.parse(str);
console.log("ttmp", ttmp);

打印结果:
在这里插入图片描述

str为表示日期的字符串。

该字符串应该能被 Date.parse() 正确方法识别(即符合 IETF-compliant RFC 2822 timestamps 或 version of ISO8601)。

IETF-compliant RFC 2822 timestamps
version of ISO8601

(二)使用dayjs()解析为Date对象,使用Date上的方法

const d = dayjs('2023-10-8')
const ttmp1 = d.valueOf()
const ttmp2 = Number(d)

打印结果:
在这里插入图片描述

二、Unix时间戳(毫秒)—>字符串,使用dayjs()

我们先来了解一些dayjs的知识

(一)解析

解析后,返回一个Day.js对象

1.当前时间

直接调用dayjs(),返回一个包含当前日期和时间的Day.js对象

var now = dayjs()
console.log(now)

在控制台中打印解析出来的内容:
在这里插入图片描述
年份: y 月份 : y 月份: y月份:M+1
天数: D 时 : D 时: D:h
分: m 秒 : m 秒: m:s

2.ISO 8601格式的字符串

const d = dayjs('2018-04-04T16:00:00.000Z')
console.log(d)

dayjs()会将ISO 8601格式的字符串按以下方式解析
在这里插入图片描述
Day.js中文网提示:

为了保证结果一致,当解析除了 ISO 8601 格式以外的字符串时,您应该使用 String + Format。

3.Unix时间戳(毫秒)

同样的,传入一个Unix时间戳(13 位数字,从1970年1月1日 UTC 午夜开始所经过的毫秒数) ,dayjs也会进行相同的解析,创建一个Day.js对象
这里推荐一个时间戳转换工具:https://tool.lu/timestamp/在这里插入图片描述

dayjs(1318781876406)
在这里插入图片描述

4.Unix时间戳(秒)

解析传入的一个 Unix 时间戳 (10 位数字,从1970年1月1日 Utc 午夜开始所经过的秒数) 创建一个 Day.js 对象。

dayjs.unix(1318781876)

在这里插入图片描述

5.Date对象

var d = new Date(2008, 7, 28)
var day = dayjs(d)

在这里插入图片描述

(二)格式化显示

1.手动拼接

如果你不太了解dayjs的格式化方法,你完全可以通过Day.js对象自己拼接出想要的格式。
例如,对于"YYYY/MM/DD HH:mm:ss"的格式,拼接方法如下:

const formatTimestamp = (ttmp: number) => {
  var y = dayjs(ttmp).$y.toString();
  var m =
    dayjs(ttmp).$M + 1 >= 10
      ? (dayjs(ttmp).$M + 1).toString()
      : "0" +
        (dayjs(ttmp).$M + 1)
          .toString()

          .toString();
  var d =
    dayjs(ttmp).$D >= 10
      ? dayjs(ttmp).$D.toString()
      : "0" + dayjs(ttmp).$D.toString().toString();
  var ht =
    dayjs(ttmp).$H >= 10
      ? dayjs(ttmp).$H.toString()
      : "0" + dayjs(ttmp).$H.toString();
  var mt =
    dayjs(ttmp).$m >= 10
      ? dayjs(ttmp).$m.toString()
      : "0" + dayjs(ttmp).$m.toString();
  var s =
    dayjs(ttmp).$s >= 10
      ? dayjs(ttmp).$s.toString()
      : "0" + dayjs(ttmp).$s.toString();
  return y + "/" + m + "/" + d + " " + ht + ":" + mt + ":" + s;
};

2.dayjs().format()

但如果你了解dayjs的话,你会发现它其实是有格式化函数的~即一行代码就可以解决了~!有空还是得多看看文档啊。。。现成的format不用,整什么真假掺半的原生js,我还搁这儿美呢。。。

dayjs(ttmp:number).format('YYYY-MM-DD HH:mm:ss')

三、在中使用

对于Naive UI中的日期选择器(Date Picker)组件,作者已经给我们留好API了,感谢他

<template>
  <pre>{{ formattedValue }}</pre>
  <n-date-picker
    v-model:formatted-value="formattedValue"
    value-format="yyyy.MM.dd HH:mm:ss"
    type="datetime"
    clearable
  />
</template>

<script lang="ts">
import { defineComponent, ref } from 'vue'

export default defineComponent({
  setup () {
    return {
      formattedValue: ref('2007.06.30 12:08:55')
    }
  }
})
</script>

结束~!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WEB前端助手(FeHelper)_v6.2.crx FeHelper--弹出菜单 插件入口,点击ICON,插件相关的所有功能都会在这里列出来,在popup选择所需使用的功能即可使用 代码美化 包括Javascript代码美化、CSS代码美化、HTML代码美化;其实所有C系的代码,都可以通过Javascript代码美化工具进行格式化查看 代码压缩 包括Web前端Javascript代码压缩、CSS代码压缩、HTML代码压缩 JSON接口自动格式化查看 当你访问的接口(打开的页面)返回的是一个JSON格式的数据,FeHelper会自动将内容进行格式化处理,便于您的查看 JSON查看器 把你的JSON代码粘贴到JSON查看器的输入框,点击“格式化”,在下方便会以非常友好的方式列出JSON数据,便于查看 字符串编解码 包括Unicode编码和解码、UTF-8字符串编码和解码、Base64字符串编解码、字符串MD5编码,前端非常实用的工具 图片Base64编码 对图片文件进行base64编码,直接拷贝datauri格式的数据 二维码生成器 能对网址、普通文本内容、电话号码、通讯录、短信等编码并生成二维码,很实用的二维码生成工具 Tracker(Javascript嗅探器) 协助您了解目标网页 JavaScript 的运行情况,包括:执行覆盖率、执行行数、是否存在执行或语法错误等信息Tracker官网 时间(戳)转换工具 支持任意时间到对应时间戳转换;支持任意时间戳到对应日期转换 正则表达式工具 提供一个正则表达式的及时测试工具,并能将匹配结果进行高亮显示、高亮定位等;同时还罗列了一些常用的正则表达式供开发者使用 编码规范检测 对当前网页进行Javascript、CSS、HTML编码规范的检测,包括文件是否压缩、标签是否正确闭合、cookie管理等等 页面性能检测 对当前页面的性能进行检测,如HTTP响应时间、页面渲染时间、是否启用gzip压缩等等 栅格规范检测 如果您的页面是基于栅格系统而开发的(如960gs),这个简单的工具能很好的帮助您分析栅格对齐是否规范

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值