You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Moment.js筛选15分钟内后端即将到来行程数据失败求助

问题分析与修复方案

核心问题点

  • 笔误导致时间范围错误:代码中写的是moment().add(2, 'minutes'),但需求是筛选15分钟内的行程,这里明显是参数写错了。
  • 类型不匹配导致判断失效:currentTime被格式化为字符串,而fifteenMinutesLater是Moment对象,isBetween方法混合类型比较时会出现逻辑异常,必须统一用Moment实例做比较。
  • 区间边界未明确包含:Moment的isBetween默认是不包含两端时间的,若需要包含当前时间和15分钟后的时间,需指定闭区间参数。

修正后的代码

const fetchUpcomingTrips = () => {
    let upcomingApiData = getTripsData?.data['upcoming'];
    if (upcomingApiData) {
      // 直接保留Moment实例,无需格式化
      const currentTime = moment().utc(true);
      // 修正为15分钟,同时保持UTC时区一致
      const fifteenMinutesLater = moment().utc(true).add(15, 'minutes');
  
      console.log(currentTime.format('YYYY-MM-DDTHH:mm:ssZ'));
  
      const upcomingTrips = upcomingApiData.filter(trip => {
        // 直接解析后端的UTC时间字符串,Moment自动识别ISO格式
        const rideStartTime = moment(trip?.ride_start_time);
        // 使用[]指定闭区间,包含当前时间和15分钟后的时间点
        return rideStartTime.isBetween(currentTime, fifteenMinutesLater, null, '[]');
      });

      setUpcomingTrips(upcomingTrips);
    }
};

额外说明

  • 调用utc(true)是为了让Moment实例切换到UTC模式,和后端返回的时区完全对齐,避免本地时区转换带来的误差。
  • 若仍有问题,可在filter逻辑中打印rideStartTime.format()、currentTime.format()、fifteenMinutesLater.format()的值,直观排查时间是否在预期区间内。

内容的提问来源于stack exchange,提问作者Fahad Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:22:08