数学渣渣如何用dateFns或原生js进行时间戳运算


我是个数学特别烂的人,如今机缘巧合做着前端的工作,无可避免与逻辑和运算打交道,最近项目遇到了这类问题,我查找了很多地方却又没有很好的解决方法,我们实习生太苦逼了,所以决定自己写一写吧,请多多包涵!(深情之处用上我最爱的deepink~~)

date-fns ( JavaScript日期实用程序库)

官方文档
进去之后大概是这个样子,这里可以选择自己的安装方式
数学渣渣如何用dateFns或原生js进行时间戳运算

vue/nuxt

公司项目用的是nuxt,所以也发一下出来,感兴趣的朋友可以稍微了解一下
vue.js文档
nuxt文档

直接进入正题

公司需要我增加个显示时间的功能
数学渣渣如何用dateFns或原生js进行时间戳运算
数学渣渣如何用dateFns或原生js进行时间戳运算

//首先引入date-fns
import dateFns from 'date-fns'

关于format

//运用dateFns的format,迅速得出进店和离店时间
  computed: {
    ...mapState({
      actionInfo: state => state.rawReportData.actionInfo
    }),
    EntranceTime() {
      return dateFns.format(this.actionInfo.enterTime, 'HH:mm:ss')
    },
    DepartureTime() {
      return dateFns.format(this.actionInfo.leaveTime, 'HH:mm:ss')
    },

接下来本以为在店时间也是如此滴顺利

时间戳转换
Math.floor

//把13位时间戳-毫秒(还有种10位的时间戳代表秒数),/1000转化成秒数,Math.floor向下取整,相减后*1000转化为毫秒
//当时间戳为0,代表北京时间1970/1/1 8:0:0;时间戳为1,代表1970/1/1 8:0:1,以此类推
 InstoreTime() {
      return dateFns.format(
        (Math.floor(this.actionInfo.leaveTime / 1000) -
          Math.floor(this.actionInfo.enterTime / 1000)) *
          1000,
        'HH:mm:ss'
      )

在店时间 = 离店 - 进店
划重点!!这一步是为了避免显示在店时间多一秒或者小一秒的情况!!!
本还在感叹我考虑得如此周到,如此天衣无缝,简直是天才,然鹅。。。
数学渣渣如何用dateFns或原生js进行时间戳运算
数学渣渣如何用dateFns或原生js进行时间戳运算
我谷歌搜了一圈,貌似是时差的原因,所以会差8小时。强行减去8小时???不知道会的朋友们能不能提供一下解决得思路

为了不辜负看博客得朋友,领导对我得信任,决定原生js手撸一份

//中间发现了一个bug,在店时间应该要能显示大于24小时得,而不是到24小时重新归零
//所以之前的方法是不妥的 let hours = parseInt(msec / (1000 * 60 * 60)) 就很好的解决了这个问题
 InstoreTime() {
      let msec =
        (Math.floor(this.actionInfo.leaveTime / 1000) -
          Math.floor(this.actionInfo.enterTime / 1000)) *
        1000
      let hours = parseInt(msec / (1000 * 60 * 60))
      let minutes = parseInt((msec % (1000 * 60 * 60)) / (1000 * 60))
      let seconds = parseInt((msec % (1000 * 60)) / 1000)
      hours < 10 ? (hours = '0' + hours) : hours
      minutes < 10 ? (minutes = '0' + minutes) : minutes
      seconds < 10 ? (seconds = '0' + seconds) : seconds
      return hours + ':' + minutes + ':' + seconds
    }

比如要求小时,想着如何把毫秒转化为小时,emmm,/1000变成秒,/60变成分钟,再/60变成小时,啊哈,这就做出来了
数学渣渣如何用dateFns或原生js进行时间戳运算
最终!!!
第一次写博客,不知道说什么,就祝大家新年快乐吧!!希望大家都能有所感悟,一起进步!!!