最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue中根據(jù)時間戳判斷對應的時間(今天 昨天 前天)

 更新時間:2019年12月20日 13:27:21   作者:ShiyuTim  
這篇文章主要介紹了vue中 根據(jù)時間戳 判斷對應的時間(今天 昨天 前天),需要的朋友可以參考下

根據(jù)時間戳 來顯示對應的時間段

本文是根據(jù)vue縮寫,但是原理都是想通的

根據(jù)一個時間戳,然后來顯示對應的時間段。如果為今天,則顯示對應的time,如果為昨天,則顯示為昨天,如果為前天,則顯示為前天。剩下的顯示為對應的日期

需求定義好了,然后開始實現(xiàn):

首先,是把時間戳轉換為對應的時間格式,js提供了原生的獲取對應年、月、日等格式的方法,但是不夠靈活,這里提供了一個網(wǎng)上找的比較靈活獲取固定格式的函數(shù)。

const formatDate = (date, fmt) => {
 date = new Date(date);
 if (typeof (fmt) === "undefined") {
  fmt = "yyyy-MM-dd HH:mm:ss";
 }
 if (/(y+)/.test(fmt)) {
  fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
 }
 let o = {
  'Y': date.getFullYear(),
  'M+': date.getMonth() + 1,
  'd+': date.getDate(),
  'H+': date.getHours(),
  'm+': date.getMinutes(),
  's+': date.getSeconds()
 }
 for (let k in o) {
  if (new RegExp(`(${k})`).test(fmt)) {
   let str = o[k] + ''
   fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : ('00' + str).substr(str.length));
  }
 }
 return fmt
}

使用這個函數(shù),需要提供一個時間戳和一個日期格式。

// `+new Date()` 為獲取當前時間戳的簡寫形式 
// `yyyy-MM-dd HH:mm:ss`為想要獲取的日期格式
formatDate(+new Date(), 'yyyy-MM-dd HH:mm:ss') // 2019-12-18 20:29:31

接下來是使用過濾器來對時間戳進行過濾。vue提供了過濾器,可以定義全局過濾器和本地過濾器,我們定義一個本地過濾器

// common.js
// 這里使用模塊化,把過濾器函數(shù)定義在外部js文件內
const formatDate ......

export { formatDate }

// index.vue
import { formatDate } from 'common'

export default {
 data () {
 return {
  time: 1576673222857
 }
 },
 methods: {},
 created() {},
 filters: {
 formateDate(data, fmt) {
  return formatDate(data, fmt)
 }
 }
}

定義好了過濾器,就可以在頁面中使用了

// index.vue

<template>
 <div>
 <span>{{ time | formateDate('MM-dd') }}</span>
 </div>
</template>

使用|(管道符)來對時間戳進行過濾,管道符左側為過濾器的第一個參數(shù),第二個參數(shù)為過濾的格式。定義好之后就會根據(jù)格式顯示對應的時間格式了。

接下來最后一步就是對比今天的日期,來顯示對應的時間(昨天,前天)
這里使用vue的if else來判斷應該顯示哪種日期格式。

<template>
 <div>
 <span v-if="new Date(time).getDate() === new Date().getDate()">{{ time | formateDate('HH:mm') }}</span> 
 // 這里把時間戳轉換為`日`,然后跟當前的`日`進行比較,如果相等,則說明是今天的時間戳,則顯示`time`
 <span v-else-if="new Date(time).getDate() === (new Date().getDate() - 1)">{{ time | formateDate('HH:mm') }}</span> 
  // 這里把**當前**的時間戳 `-1`,說明是昨天。比如說今天是18日,`-1`之后就是17,如果`time`轉換后 與 17 相等,說明應該顯示為`昨天`。
  <span v-else-if="new Date(time).getDate() === (new Date().getDate() - 2)">{{ time | formateDate('HH:mm') }}</span> 
  // `-2`為`前天`
  <span v-else>{{ time | formateDate('MM-dd') }</span>
  // 否則顯示為對應的日期
 </div> 
</template>

好了,以上是根據(jù)日期去比較來顯示對應的時間?!?但是,你以為完了嗎?

有一個重要的問題就是,每個月都有30日中的其中一日,今天是12月18日,比較18相等,顯示對應的時間,但是如果為11月18日呢?如果還顯示對應的時間顯然是不對了。

所以應該把年、月、日 全都對比一下,然后在確定對應的時間。

所以代碼應該如下:

 <span class="lastDate"
  v-if="(new Date(time).getDate() == new Date().getDate()) && (new Date(item.lastTime).getMonth() == new Date().getMonth()) && (new Date(item.lastTime).getYear() == new Date().getYear())"
   >{{time | FormatDate( 'HH:mm')}}</span>
   
 <span class="lastDate"
  v-if="(new Date(time).getDate() == new Date().getDate() - 1) && (new Date(item.lastTime).getMonth() == new Date().getMonth()) && (new Date(item.lastTime).getYear() == new Date().getYear())"
   >昨天</span>

 <span class="lastDate"
  v-if="(new Date(time).getDate() == new Date().getDate() - 1) && (new Date(item.lastTime).getMonth() == new Date().getMonth()) && (new Date(item.lastTime).getYear() == new Date().getYear())"
   >前天</span>
   
 <span v-else>{{ time | formateDate('MM-dd') }</span>

雖然是完成了比較年月日后,來顯示對應的日期。但是看看這些代碼巨丑無比,而且極不容易理解,所以,我們不應該在html里面寫這么多判斷代碼,so,我們來封裝成一個函數(shù),然后在來使用函數(shù)對比。

在封裝函數(shù)之前,我們先確定一下,上面這些判斷代碼中,有哪些相同的地方,哪些不同的地方。

相同的是

  • 使用new Date(time) 來對比new Date()
  • 使用getDate() / getMonth() / getYear()
  • 使用兩個&&來對比

不同的是

  • 一個new Date()里面需要參數(shù)time,一個不要參數(shù)

有些需要-對應的數(shù)字

大概梳理了一下出以上部分,把相同的寫進函數(shù)內,不同的使用形參,也就是arguments。

// common.js

const compareDate = (timestamp, day = 0) => {
 // timestamp 為要傳入的時間戳
 // day 為要減去的日子 因為比較*當天*的話,是不需要減的,所以默認定義成0,
 
 // 根據(jù)上面分析,有些需要參數(shù)`time`,有些不需要,所以使用一個函數(shù)來區(qū)分一下 
 let newDate = (time = null) => {
 return time === null ? new Date() : new Date(time)
 }
 
 // 這里返回 比較后的值,比較成功,則返回`true`,失敗則返回`false`
 return (newDate(timestamp).getDate() == newDate().getDate() - day) && (newDate(timestamp).getMonth() == newDate().getMonth()) && (newDate(timestamp).getYear() == newDate().getYear()) 
}

export {
 compareDate
}

上面就是封裝好的函數(shù),但是有一個問題,就是函數(shù)里面寫死了比較年月日,因為目前都需要比較三個,就先這樣,有時間在改為根據(jù)參數(shù)在來區(qū)分比較年或月或日。

然后就可以使用了,使用的時候需要注意一下,我的這篇博客里面已經(jīng)說了,這里就不細說, 直接放代碼:

// index.vue
import { compareDate } from 'common.js'
data() {
 return {
 compare: compareDate
 }
}
<template>
 <div>
  <span v-if="compare(time)">{{time | FormatDate( 'HH:mm')}}</span>
  <span v-else-if="compare(time, 1)">昨天</span>
  <span v-else-if="compare(time, 2)">前天</span>
   <span v-else>{{time | FormatDate( 'MM-d')}}</span>
 </div> 
</template>

這樣是不是簡潔了很多呢?,而且也容易理解,看著也清晰。

以上就是根據(jù)時間戳,來比較當前時間顯示對應的日期。如果有更好的方法歡迎討論。如果有疑問也可以留言。

總結

以上所述是小編給大家介紹的vue中根據(jù)時間戳判斷對應的時間(今天 昨天 前天),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

相關文章

  • Vue.js每天必學之過渡與動畫

    Vue.js每天必學之過渡與動畫

    Vue.js每天必學之過渡與動畫,對Vue.js過渡與動畫進行深入學習,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • vue?頁面卡死,點擊無反應的問題及解決

    vue?頁面卡死,點擊無反應的問題及解決

    這篇文章主要介紹了vue?頁面卡死,點擊無反應的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vue.nextTick純干貨使用方法詳解

    Vue.nextTick純干貨使用方法詳解

    這篇文章主要為大家介紹了Vue.nextTick使用方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • nuxt實現(xiàn)封裝axios并且獲取token

    nuxt實現(xiàn)封裝axios并且獲取token

    這篇文章主要介紹了nuxt實現(xiàn)封裝axios并且獲取token,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • elementui?el-calendar日歷組件使用示例

    elementui?el-calendar日歷組件使用示例

    這篇文章主要為大家介紹了elementui?el-calendar日歷組件使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • vue 地圖可視化 maptalks 篇實例代碼詳解

    vue 地圖可視化 maptalks 篇實例代碼詳解

    這篇文章主要介紹了vue 地圖可視化 maptalks 篇,本文分步驟通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • 利用Vue Router實現(xiàn)單頁面應用(SPA)的代碼示例

    利用Vue Router實現(xiàn)單頁面應用(SPA)的代碼示例

    在當今前端開發(fā)中,單頁面應用(SPA)已成為一種主流的開發(fā)模式,它通過在用戶與網(wǎng)頁之間提供更流暢的交互體驗,來改變傳統(tǒng)多頁面應用的思維,本文將詳細介紹如何利用 Vue.js 中的 Vue Router 來實現(xiàn)一個簡單的單頁面應用,需要的朋友可以參考下
    2025-01-01
  • 詳解vue-router傳參的兩種方式

    詳解vue-router傳參的兩種方式

    Vue Router 是 Vue.js 官方的路由管理器。這篇文章主要介紹了詳解vue-router傳參的兩種方式,需要的朋友可以參考下
    2018-09-09
  • 詳解Vue 換膚方案驗證

    詳解Vue 換膚方案驗證

    這篇文章主要介紹了Vue 換膚方案驗證,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • Vue3+Canvas實現(xiàn)坦克大戰(zhàn)游戲(二)

    Vue3+Canvas實現(xiàn)坦克大戰(zhàn)游戲(二)

    本文主要給大家講解一下子彈擊中物體、物體銷毀、敵方坦克構建生成、運動算法、爆炸效果、以及障礙物的生成,感興趣的小伙伴可以了解一下
    2022-03-03

最新評論

黎平县| 临汾市| 饶阳县| 芮城县| 石首市| 永胜县| 志丹县| 永济市| 理塘县| 宣汉县| 五指山市| 玉门市| 盐城市| 齐齐哈尔市| 岗巴县| 凉城县| 景宁| 高阳县| 哈巴河县| 遵义市| 广安市| 昌乐县| 高密市| 浙江省| 临江市| 蒙自县| 郯城县| 寿宁县| 荃湾区| 安宁市| 濮阳县| 柏乡县| 城口县| 盐城市| 林周县| 庐江县| 武乡县| 万州区| 上杭县| 乌恰县| 永泰县|