vue 日期判断_vue中根据时间戳判断对应的时间(今天 昨天 前天)

本文详细介绍了如何在Vue应用中,通过时间戳智能显示对应的时间段,如今天、昨天、前天,同时优化了代码结构,创建了自定义函数compareDate处理日期比较。阅读者将学会如何封装代码,提升代码可读性和维护性。
部署运行你感兴趣的模型镜像

根据时间戳 来显示对应的时间段

本文是根据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提供了过滤器,可以定义全局过滤器和本地过滤器,我们定义一个本地过滤器

// common.js

// 这里使用模块化,把过滤器函数定义在外部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

{{ time | formateDate('MM-dd') }}

使用|(管道符)来对时间戳进行过滤,管道符左侧为过滤器的第一个参数,第二个参数为过滤的格式。定义好之后就会根据格式显示对应的时间格式了。

接下来最后一步就是对比今天的日期,来显示对应的时间(昨天,前天)

这里使用vue的if else来判断应该显示哪种日期格式。

{{ time | formateDate('HH:mm') }}

// 这里把时间戳转换为`日`,然后跟当前的`日`进行比较,如果相等,则说明是今天的时间戳,则显示`time`

{{ time | formateDate('HH:mm') }}

// 这里把**当前**的时间戳 `-1`,说明是昨天。比如说今天是18日,`-1`之后就是17,如果`time`转换后 与 17 相等,说明应该显示为`昨天`。

{{ time | formateDate('HH:mm') }}

// `-2`为`前天`

{{ time | formateDate('MM-dd') }

// 否则显示为对应的日期

好了,以上是根据日期去比较来显示对应的时间。—— 但是,你以为完了吗?

有一个重要的问题就是,每个月都有30日中的其中一日,今天是12月18日,比较18相等,显示对应的时间,但是如果为11月18日呢?如果还显示对应的时间显然是不对了。

所以应该把年、月、日 全都对比一下,然后在确定对应的时间。

所以代码应该如下:

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')}}

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())"

>昨天

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())"

>前天

{{ time | formateDate('MM-dd') }

虽然是完成了比较年月日后,来显示对应的日期。但是看看这些代码巨丑无比,而且极不容易理解,所以,我们不应该在html里面写这么多判断代码,so,我们来封装成一个函数,然后在来使用函数对比。

在封装函数之前,我们先确定一下,上面这些判断代码中,有哪些相同的地方,哪些不同的地方。

相同的是

使用new Date(time) 来对比new Date()

使用getDate() / getMonth() / getYear()

使用两个&&来对比

不同的是

一个new Date()里面需要参数time,一个不要参数

有些需要-对应的数字

大概梳理了一下出以上部分,把相同的写进函数内,不同的使用形参,也就是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.vue

import { compareDate } from 'common.js'

data() {

return {

compare: compareDate

}

}

{{time | FormatDate( 'HH:mm')}}

昨天

前天

{{time | FormatDate( 'MM-d')}}

这样是不是简洁了很多呢?,而且也容易理解,看着也清晰。

以上就是根据时间戳,来比较当前时间显示对应的日期。如果有更好的方法欢迎讨论。如果有疑问也可以留言。

总结

以上所述是小编给大家介绍的vue中根据时间戳判断对应的时间(今天 昨天 前天),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

本文标题: vue中根据时间戳判断对应的时间(今天 昨天 前天)

本文地址: http://www.cppcns.com/wangluo/javascript/294335.html

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think>我们正在使用Vue框架,需要判断一个日期是否在今天之前(即过去日期)。思路:1.获取当前日期今天),并去除时间部分,只保留年月日。2.将待比较的日期也转换为只保留年月日的形式。3.比较两个日期:如果待比较日期小于今天,则为今天之前的日期。注意:在JavaScript中,日期对象可以直接比较,因为日期对象在比较时会转换为时间戳(毫秒数)。步骤:-获取今天日期,使用`newDate()`,然后设置时间为0时0分0秒0毫秒,这样得到今天的开始时间(即午夜)。-同样,对待比较的日期也做同样的处理(如果它本身没有时间部分,则可以直接比较;如果有时间部分,我们需要将其转换为同一天的开始时间,以便只比较日期部分)。但是,我们也可以使用另一种方法:将日期转换为ISO字符串(例如"2024-06-15"),然后比较字符串。但注意,ISO字符串可能会包含时区问题,所以更可靠的方法是使用本地日期并设置时间为午夜。方法1:使用Date对象设置时间为午夜(00:00:00)方法2:使用toDateString(),但注意toDateString()返回的字符串格式不一定适合直接比较。推荐方法:使用Date对象,并将小时、分钟、秒、毫秒都设置为0,然后比较时间戳。具体实现:1.创建一个函数,接受一个日期参数(可以是字符串、时间戳或Date对象)。2.将这个日期参数转换为Date对象(如果还不是的话)。3.创建今天的Date对象,并设置时间为0:0:0:0。4.将传入的日期对象也设置为0:0:0:0(这样只比较日期部分)。5.比较两个日期:如果传入的日期小于今天,则返回true,否则返回false。注意:由于时区的影响,使用newDate()创建的是本地时间。而将时间设置为0时0分0秒0毫秒,也是本地时间的开始。代码示例(在Vue方法中):```javascriptmethods:{isBeforeToday(date){//将传入的date转换为Date对象constinputDate=newDate(date);//检查是否有效if(isNaN(inputDate)){returnfalse;//或者根据需求处理无效日期}//获取今天日期,并设置时间为0:0:0:0consttoday=newDate();today.setHours(0,0,0,0);//同样,将输入日期时间部分设置为0:0:0:0inputDate.setHours(0,0,0,0);//比较returninputDate<today;}}```使用示例:在模板或Vue实例中调用这个方法:```javascriptif(this.isBeforeToday('2023-01-01')){console.log('这个日期今天之前');}else{console.log('这个日期今天或之后');}```注意:如果传入的日期字符串是ISO格式(如'2023-01-01'),在创建Date对象时,不同浏览器可能会有差异,但现代浏览器都能正确解析。如果日期格式复杂,可能需要使用更复杂的解析(如使用moment.js或date-fns),但这里我们假设传入的是能被Date识别的格式。另外,如果传入的日期包含时区,那么设置时间为本地时间的午夜可能会受到时区影响。例如,传入的日期字符串是UTC时间,而本地时区是东八区,那么转换成本地时间可能会加8小时。因此,如果传入的日期是ISO格式(如'2023-01-01T00:00:00Z'),那么它代表的是UTC时间,在转换为本地时间时,可能会变成当天的早上8点(东八区)。这样,当我们设置时间为0时0分0秒0毫秒时,实际上是将本地时间设置为当天的开始,而UTC时间对应的本地时间可能会比UTC时间早8小时(或根据时区不同而不同)。因此,如果我们的业务需求是严格按本地日期比较,那么上述方法是可行的。如果需求是按UTC日期比较,则需要使用UTC时间。如果希望按UTC日期比较,可以这样:```javascriptmethods:{isBeforeTodayUTC(date){constinputDate=newDate(date);if(isNaN(inputDate)){returnfalse;}//获取当前UTC日期(去掉时间部分)consttodayUTC=newDate();todayUTC.setUTCHours(0,0,0,0);//设置为UTC的0点//将输入日期也转换为UTC的0点constinputDateUTC=newDate(Date.UTC(inputDate.getUTCFullYear(),inputDate.getUTCMonth(),inputDate.getUTCDate()));returninputDateUTC<todayUTC;}}```但是,大多数情况下,我们比较的是本地日期,所以第一种方法更常见。在Vue中,我们可以将这个函数放在methods中,然后在模板中使用,或者在其他方法中调用。例如,在模板中显示不同的样式:```html<template><div:class="{'past-date':isBeforeToday(item.date)}">{{item.date}}</div></template>```相关问题:1.在Vue中如何格式化日期2.如何处理时区问题,确保日期比较的准确性?3.除了今天之前,如何判断一个日期是否在特定日期之前或之后?4.在Vue中,如何实现一个日期过滤器(filter)来格式化日期?注意:在Vue3中,过滤器(filter)已经被移除,推荐使用计算属性或方法。引用说明:我们在这里没有直接引用外部资源,但日期处理是JavaScript的基础知识。如果用户需要更复杂的日期操作,推荐使用第三方库如moment.js、date-fns或day.js。</think>### Vue判断日期是否在今天之前 在 Vue判断一个日期是否在今天之前(即过去日期),可以通过以下步骤实现: #### 核心实现方法 ```javascript // 在 Vue 方法或计算属性中 isBeforeToday(date) { // 1. 获取今天日期(去除时间部分) const today = new Date(); today.setHours(0, 0, 0, 0); // 设置为午夜 00:00:00 // 2. 处理传入的日期(支持字符串/时间戳/Date对象) const inputDate = new Date(date); // 3. 比较日期(忽略时间部分) return inputDate < today; } ``` #### 使用示例 ```vue <template> <div> <p v-if="isBeforeToday(targetDate)"> {{ targetDate }} 是过去日期 </p> <p v-else> {{ targetDate }} 是今天或未来日期 </p> </div> </template> <script> export default { data() { return { targetDate: "2023-06-15" // 测试日期 } }, methods: { isBeforeToday(date) { const today = new Date(); today.setHours(0, 0, 0, 0); return new Date(date) < today; } } } </script> ``` #### 关键点说明 1. **日期标准化**: - 使用 `setHours(0,0,0,0)` 将时间归零,确保只比较日期部分 - 处理不同格式的日期输入(ISO 字符串、时间戳等) 2. **时区处理**: ```javascript // 如需处理时区,使用UTC时间 const todayUTC = new Date(Date.UTC( new Date().getUTCFullYear(), new Date().getUTCMonth(), new Date().getUTCDate() )); ``` 3. **日期格式建议**: - 推荐使用 ISO 8601 格式:`"YYYY-MM-DD"` - 避免使用 `"DD/MM/YYYY"` 等本地化格式(可能导致解析错误) #### 常见问题解决 - **日期解析问题**: ```javascript // 添加日期有效性检查 if (isNaN(new Date(date).getTime())) { console.error("无效日期:", date); return false; } ``` - **Vue 响应式更新**: ```javascript // 在计算属性中使用可自动更新 computed: { isPastDate() { return this.isBeforeToday(this.targetDate); } } ``` #### 替代方案(使用第三方库) 安装 day.js(轻量级日期库): ```bash npm install dayjs ``` 使用示例: ```javascript import dayjs from 'dayjs'; isBeforeToday(date) { return dayjs(date).isBefore(dayjs().startOf('day')); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值