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

如何在数组中筛选与指定日期同天的时间并返回时分?

解决方案

问题出在直接用formatISO匹配时,时区差异导致日期字符串不对应。可以用date-fns的日期判断方法忽略时间和时区干扰,只比较日期部分,具体实现如下:

核心思路

  1. 将目标起始日期和数组中的ISO字符串都转为Date对象
  2. 用isSameDay方法判断两个日期是否为同一天(该方法会自动处理时区逻辑)
  3. 对符合条件的日期,提取时分格式的字符串

代码实现

首先导入所需的date-fns方法:

import { isSameDay, format } from 'date-fns';

然后编写处理逻辑:

const array = [
    "2023-03-14T13:00:00.000Z",
    "2023-03-13T12:30:00.000Z",
    "2023-03-06T13:00:00.000Z",
    "2023-04-24T11:30:00.000Z",
    "2023-03-24T13:00:00.000Z",
];

// 把给定的起始时间转为Date对象
const targetDate = new Date("Thu Mar 24 2023 00:00:00 GMT+0100");

// 筛选同天日期并提取时分
const matchedTimeList = array
  .map(isoStr => new Date(isoStr))
  .filter(date => isSameDay(date, targetDate))
  .map(date => format(date, 'HH:mm'));

console.log(matchedTimeList); // 输出: ['13:00']

补充说明

  • 之前用formatISO失败的原因:该方法会将目标日期转为UTC时区的ISO字符串(比如GMT+0100的2023-03-24 00:00会变成2023-03-23T23:00:00.000Z),和数组中2023-03-24T13:00:00.000Z的日期部分不匹配。
  • 如果需要基于UTC时区判断同一天,可以结合date-fns-tz的时区处理方法:
import { isSameDay, format, zonedTimeToUtc } from 'date-fns-tz';

// 转换目标日期为UTC时区的日期对象
const targetUtcDate = zonedTimeToUtc(targetDate, 'Europe/Paris');
const matchedTimeList = array
  .map(isoStr => new Date(isoStr))
  .filter(date => isSameDay(date, targetUtcDate, { timeZone: 'UTC' }))
  .map(date => format(date, 'HH:mm'));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:32:30