如何使用Moment.js验证日期是否过期?解决实现失效问题
订阅到期日期验证问题解决方案
你的代码失效的核心问题是日期字符串格式不统一:固定的订阅到期日期用的是YYYY-MM-DD h:mm:ss格式(如'2023-03-03 12:22:16'),但当前时间却被转成了DD/MM/YYYY h:mm:ss格式,两种格式的字符串字符顺序完全不同,直接比较大小逻辑必然出错。
用Moment.js正确验证的方式是直接操作日期对象,不要转成字符串:
// 将订阅到期日期解析为Moment对象(指定格式避免歧义) const subscriptionExpireTime = moment('2023-03-03 12:22:16', 'YYYY-MM-DD h:mm:ss'); // 直接和当前时间比较 if (subscriptionExpireTime.isBefore(moment())) { // 这里写订阅已过期后的处理逻辑 } else { return reply('你的当前订阅尚未过期,请等待到期'); }
关键说明:
isBefore(moment()):判断订阅到期时间是否在当前时间之前,即已过期- 如果要判断未过期,直接用
isAfter(moment())或者取反逻辑即可 - 始终用Moment对象做日期比较,不要转成自定义格式的字符串,彻底避免格式不匹配导致的错误
内容的提问来源于stack exchange,提问作者user21329933
相关产品推荐
相关产品推荐

