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

React格式化日期遇RangeError:Invalid time value,空数组时如何校验booking?

解决RangeError: Invalid time value及booking空值检查问题

问题分析

你遇到的错误看似是日期格式问题,但结合bookings数组为空的情况,实际可能是两种场景:

  • bookings本身为null/undefined(而非空数组),导致调用map时报错
  • 即使bookings是数组,其中存在null/undefined的booking项,或者booking.startDate本身是无效值(比如null、空字符串)

解决方案

通过多层检查规避错误,同时处理空状态:

  1. 先校验bookings数组本身的有效性
    确保bookings是存在且非空的数组,否则渲染空状态提示。

  2. 过滤无效的booking项
    在map前过滤掉null/undefined的booking,或者在渲染时单独判断跳过。

  3. 验证startDate的有效性
    确保startDate能被new Date()正确解析后,再执行格式化操作。

修改后的代码示例

import React from "react";
import type { RoomBooking } from "../../services/room/room";
import format from "date-fns/format";

export const BookingList = ({ bookings }: { bookings?: RoomBooking[] }) => {
  // 检查bookings是否为有效非空数组
  if (!bookings || bookings.length === 0) {
    return <p>暂无预订记录</p>;
  }

  return (
    <ul>
      {bookings.map((booking, index) => {
        // 跳过null/undefined的booking项
        if (!booking) return null;
        
        // 验证startDate是否为有效时间值
        const startDate = new Date(booking.startDate);
        if (isNaN(startDate.getTime())) {
          return <li key={`booking-${index}`}>无效日期</li>;
        }

        return (
          <li key={`booking-${index}`}>
            {format(startDate, "dd/MM/yyyy")}
          </li>
        );
      })}
    </ul>
  );
};

关键说明

  • 给bookings参数添加可选标记?,适配可能传入undefined的场景
  • 用!booking快速过滤空的booking项
  • 通过isNaN(startDate.getTime())判断日期是否有效,避免format传入无效值报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:05:25