<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>好了,以上是根据日期去比较来显示对应的时间。—— 但是,你以为完了吗?
有一个重要的问题就是,每个月都有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,我们来封装成一个函数,然后在来使用函数对比。
在封装函数之前,我们先确定一下,上面这些判断代码中,有哪些相同的地方,哪些不同的地方。
相同的是
使用new Date(time) 来对比new Date()
使用getDate() / getMonth() / getYear()
使用两个&&来对比
不同的是
一个new Date()里面需要参数time,一个不要参数










