使用Moment处理UTC时间筛选数据时遇类型不匹配错误求助
问题描述
需要筛选最近30分钟的数据并在UI中展示,时间采用UTC格式,使用Moment库时出现类型错误:
Javascript - Operator '>' cannot be applied to types 'Date' and 'Moment'.
用户代码如下:
let d = moment(); let d_utc = moment.utc(); var customDate = new Date(); d_utc.minutes(-30); filteredData = filteredData.filter((category) => { return category.uploaded_time > d_utc; });
解决方法
问题核心是category.uploaded_time是原生Date类型,而d_utc是Moment对象,两者无法直接用比较运算符对比,以下两种方法可解决:
方法一:将Moment对象转为Date类型
调用Moment的toDate()方法把Moment对象转成原生Date,就能和category.uploaded_time直接比较:
// 正确获取30分钟前的UTC时间,替代原错误的minutes(-30)写法 let d_utc = moment.utc().subtract(30, 'minutes'); filteredData = filteredData.filter((category) => { return category.uploaded_time > d_utc.toDate(); });
注意:原代码里d_utc.minutes(-30)是错误用法,它会把分钟数设置为-30,而非减去30分钟,必须用subtract(30, 'minutes')来实现“30分钟前”的逻辑。
方法二:将Date对象转为Moment对象
把category.uploaded_time转成Moment对象,用Moment自带的isAfter()方法判断时间先后:
let d_utc = moment.utc().subtract(30, 'minutes'); filteredData = filteredData.filter((category) => { return moment(category.uploaded_time).utc().isAfter(d_utc); });
这种方式更贴合Moment库的使用规范,可读性更强。
内容的提问来源于stack exchange,提问作者sTg
相关产品推荐
相关产品推荐

