vue 格式化时间(多种方法)

1、moment.js插件的使用

后端传了一个 2020-11-27T12:01:50.942 00:000 这样的时间过来,结果我发现我之前用的时间过滤器竟然不能把这个时间转化成正确时间,于是就发现moment.js这个插件啦~
同时,感谢一个up主的文章解惑。原来,前端从mysql取出timestamp类型的时间与实际时间差8小时。

安装:

npm install moment

引入(局部):

import moment from 'moment'

把后台获取到的时间直接格式化,在丢到data中

time: moment(elem.gmtCreate).format('YYYY-MM-DD hh:mm:ss'),

2、定义一个时间过滤器

在main.js文件中,定义一个时间过滤器

// 定义一个过滤器 处理时间
Vue.filter('dateFormat', function (originVal) {
  const dt = new Date(originVal)
  const y = dt.getFullYear()
  // 月份从0开始,使她变成字符串,不足两位时,前面补个0.
  const m = (dt.getMonth() + 1 + '').padStart(2, '0')
  const d = (dt.getDate() + '').padStart(2, '0')
  const hh = (dt.getHours() + '').padStart(2, '0')
  const mm = (dt.getMinutes() + '').padStart(2, '0')
  const ss = (dt.getSeconds() + '').padStart(2, '0')
  return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
})

在需要转化时间的组件中直接使用:

 <template slot-scope="scope">
            {{scope.row.add_time | dateFormat}}
 </template>

3、封装一个time.js文件

创建一个time.js文件:

/**
 * @param {Function} fn 防抖函数
 * @param {Number} delay 延迟时间
 */
export function debounce (fn, delay) {
  var timer
  return function () {
    var context = this
    var args = arguments
    clearTimeout(timer)
    timer = setTimeout(function () {
      fn.apply(context, args)
    }, delay)
  }
}

/**
 * @param {date} time 需要转换的时间
 * @param {String} fmt 需要转换的格式 如 yyyy-MM-dd、yyyy-MM-dd HH:mm:ss
 */
export function formatTime (time, fmt) {
  if (!time) return ''
  else {
    const date = new Date(time)
    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
  }
}

在data中:

 dateDay: null,
 dateYear: null,
 dateWeek: null,
 weekday: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],

在script中引入time.js

import { formatTime } from '../utils/time.js'

在created(){}中:

this.timeFn()

在methods中:

timeFn () {
      setInterval(() => {
        this.dateYear = formatTime(new Date(), 'yyyy-MM-dd')
        this.dateWeek = this.weekday[new Date().getDay()]
        this.dateDay = formatTime(new Date(), 'HH: mm: ss')
      }, 1000)
    },

在template把时间渲染在页面上:

 <div>{{dateYear}}{{dateWeek}}{{dateDay}}</div>

4、直接转换

此转换出来的结构为,如: 2020/11/30 下午3:06:15

 const date = new Date().toLocaleString()
 this.dialogData = {}
 this.dialogData.now = date

5、实时显示时间

<template>
  <div>{{date}}</div> //放置时间
</template>
<script>
export default {
  data () {
    return {
      date: new Date()
    }
  },
  mounted () {
    // 声明一个变量指向Vue实例this,保证作用域一致
    let _this = this
    this.timer = setInterval(() => {
      // 修改数据date
      _this.date = new Date().toLocaleString()
    }, 1000)
  },
  beforeDestroy () {
    if (this.timer) {
      // 在vue实例销毁前,清除我们的定时器
      clearInterval(this.timer)
    }
  }
}
</script>

6、10位/13位时间戳转日期

export function timestampToTime (timestamp) {
  let date
  //判断是否为空,空值的话 会报错
  if (timestamp == null) return
  //时间戳为10位需*1000,时间戳为13位的话不需乘1000
  timestamp.length === 10 ? date = new Date(parseInt(timestamp * 1000)) : date = new Date(parseInt(timestamp));
  let Y = date.getFullYear() + '-';
  let M = (date.getMonth() + 1 < 10 ? `0${(date.getMonth() + 1)}` : date.getMonth() + 1) + '-';
  let D = date.getDate() + ' ';
  let h = date.getHours() + ':';
  let m = (date.getMinutes() < 10 ? `0${date.getMinutes()}` : date.getMinutes()) + ':';
  let s = date.getSeconds() < 10 ? `0${date.getSeconds()}` : date.getSeconds();
  return Y + M + D + h + m + s;
}


let a = "1624945115227" 
console.log(timestampToTime(a))
 //打印出 2021-06-29 13:38:35

七、日期转13位时间戳

 Date.parse(time)
  • 3
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3提供了多种方式来格式化时间。其中一种方式是使用内置的过滤器(pipe)来处理时间格式。你可以使用内置的`|`过滤器来格式化时间。另一种方式是直接调用`Intl.DateTimeFormat`来格式化时间。你可以创建一个`Intl.DateTimeFormat`的实例,并传入相应的参数来定义时间的格式。还有一种方式是使用第三方库,如`date-fns`或`vueuse`来进行时间格式。 如果你想在Vue 3中使用内置的过滤器来格式化时间,你可以这样做: ``` <p>{{ date | 过滤器名称 }}</p> ``` 其中,`date`是你要格式化时间数据,`过滤器名称`是你想要使用的过滤器的名称。 如果你想直接调用`Intl.DateTimeFormat`来格式化时间,你可以这样做: ``` const df = new Intl.DateTimeFormat('en', { year: 'numeric', month: 'long', day: 'numeric' }) new Vue({ template: '<p>{{ date }}</p>', computed: { date() { return df.format(new Date(2021, 9, 10)) } } }) ``` 其中,`df`是一个`Intl.DateTimeFormat`的实例,你可以根据需要定义时间的格式。 另外,你还可以使用第三方库`vueuse`来进行时间格式。你可以使用`useDateFormat`函数来格式化时间。具体的使用方法如下: ``` <template> <!-- 显示 --> <div>{{ create_time }}</div> </template> <script> import { useDateFormat } from '@vueuse/core' export default { data() { return { // 需要格式化时间 create_time: '' } }, created() { // 请求过来的数据 this.create_time = useDateFormat(res.data.goods.create_time, 'YYYY-MM-DD') // 可以根据需要进行格式化 /* YYYY-MM-DD HH:mm:ss YYYY年MM月DD日 YYYY年MM月DD日 HH时mm分ss秒 */ } } </script> ``` 在这个例子中,你可以使用`useDateFormat`函数来格式化时间,将需要格式化时间格式化的模板作为参数传入即可。 总结起来,Vue 3提供了多种方式来格式化时间,包括使用内置的过滤器、直接调用`Intl.DateTimeFormat`以及使用第三方库如`vueuse`。你可以根据自己的需求选择合适的方式来进行时间格式。 #### 引用[.reference_title] - *1* *2* [vue3中怎么处理时间格式](https://blog.csdn.net/qwe0415/article/details/130350246)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [vue3之时间显示格式化问题](https://blog.csdn.net/su_yun/article/details/127671682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值