时间:2021-05-26
根据时间戳 来显示对应的时间段
本文是根据vue缩写,但是原理都是想通的
根据一个时间戳,然后来显示对应的时间段。如果为今天,则显示对应的time,如果为昨天,则显示为昨天,如果为前天,则显示为前天。剩下的显示为对应的日期
需求定义好了,然后开始实现:
首先,是把时间戳转换为对应的时间格式,js提供了原生的获取对应年、月、日等格式的方法,但是不够灵活,这里提供了一个网上找的比较灵活获取固定格式的函数。
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}使用这个函数,需要提供一个时间戳和一个日期格式。
// `+new Date()` 为获取当前时间戳的简写形式 // `yyyy-MM-dd HH:mm:ss`为想要获取的日期格式formatDate(+new Date(), 'yyyy-MM-dd HH:mm:ss') // 2019-12-18 20:29:31接下来是使用过滤器来对时间戳进行过滤。vue提供了过滤器,可以定义全局过滤器和本地过滤器,我们定义一个本地过滤器
定义好了过滤器,就可以在页面中使用了
// index.vue
<template> <div> <span>{{ time | formateDate('MM-dd') }}</span> </div></template>使用|(管道符)来对时间戳进行过滤,管道符左侧为过滤器的第一个参数,第二个参数为过滤的格式。定义好之后就会根据格式显示对应的时间格式了。
接下来最后一步就是对比今天的日期,来显示对应的时间(昨天,前天)
这里使用vue的if else来判断应该显示哪种日期格式。
好了,以上是根据日期去比较来显示对应的时间。—— 但是,你以为完了吗?
有一个重要的问题就是,每个月都有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,我们来封装成一个函数,然后在来使用函数对比。
在封装函数之前,我们先确定一下,上面这些判断代码中,有哪些相同的地方,哪些不同的地方。
相同的是
不同的是
有些需要-对应的数字
大概梳理了一下出以上部分,把相同的写进函数内,不同的使用形参,也就是arguments。
// common.js
const compareDate = (timestamp, day = 0) => { // timestamp 为要传入的时间戳 // day 为要减去的日子 因为比较*当天*的话,是不需要减的,所以默认定义成0, // 根据上面分析,有些需要参数`time`,有些不需要,所以使用一个函数来区分一下 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}上面就是封装好的函数,但是有一个问题,就是函数里面写死了比较年月日,因为目前都需要比较三个,就先这样,有时间在改为根据参数在来区分比较年或月或日。
然后就可以使用了,使用的时候需要注意一下,我的这篇博客里面已经说了,这里就不细说, 直接放代码:
// index.vueimport { 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>这样是不是简洁了很多呢?,而且也容易理解,看着也清晰。
以上就是根据时间戳,来比较当前时间显示对应的日期。如果有更好的方法欢迎讨论。如果有疑问也可以留言。
总结
以上所述是小编给大家介绍的vue中根据时间戳判断对应的时间(今天 昨天 前天),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
直接上代码,代码中有注释,大家好好看!/***将一个时间戳转换成提示性时间字符串,如*2分钟内无显示*2分钟-24小时HH:mm*昨天昨天HH:mm*前天前天H
Android中时间戳的详细解释:(1).定义:时间戳就是根据当前系统时间生成的一组随机数字。(2).作用:作为对数据唯一性的一种判断依据。避免了重复修改数据所
根据当前时间戳获得整小时时间戳unit=3600start_time=int(time.time())/3600*3600根据当前时间戳获得整天时间戳unit=
本文实例讲述了PHP实现根据时间戳获取周几的方法。分享给大家供大家参考,具体如下:获取某个时间戳的周几,以及未来几天以后的周几其中:$time代表时间$i今天开
本文实例为大家分享了vue按时间段查询的案例,效果图如下html代码今天昨天本周上周本月上月查询vue.js代码点击事件//获取时间、//时间解析;Time:f