Javascript条件时间范围格式函数

问题描述

我的前端应用使用 React。

我有两种不同的时间格式的数据。

一个像这样08-10,另一个像这样05:00-05:30

大多数时间格式数据是这样的08-10,少数是这样的05:00-05:30

获取时间日期数据后,我使用了 map 函数并传递给我的 time-format 辅助函数,在我的浏览器中,我想像这样显示我的数据 05:00-05:30

我的辅助函数是这样的:如果时间看起来像这样 08-10 那么函数会将它分成两个然后添加 : 并将它们转换为 08:00-10:00。正如我提到的,我有两种不同的时间格式数据,当数据像这样 05:00-05:30 时,我的辅助函数将它们像 0500-0530 一样转换。

如果数据类似于 05:00-05:30,我想有条件地呈现我的函数,然后按原样返回,如果数据类似于 08-10,则将它们转换为 08:00-10:00。我不知道如何在我的辅助函数中做到这一点。

const toTimeRangeFormat = (range) => {
  console.log(range);

  const [start,end] = range?.split("-");
  const toFourDigitTime = (time) => {
    const [hours,minutes] = time.split(":");
    return hours.padStart(2,"0") + (minutes ? minutes : ":00");
  };

  if (start && end) {
    return toFourDigitTime(start) + " - " + toFourDigitTime(end);
  }

  return range;
};

const time = ["08-10","05:00-05:30"];

time.filter((i) => {
  if (typeof i === "string") {
    return toTimeRangeFormat(i);
  }
});

console.log(toTimeRangeFormat());

解决方法

如果你正确调用它,你的代码似乎可以工作

我假设你想要这个

const re = /(\d{2}):?(\d{2})?/; // take the (set of) two digits from NN:NN,NNNN or NN - the ? means optional
const toFourDigitTime = time => {
  const [hours,minutes] = time.match(re).slice(1); // ignore result[0]
  return `${hours.padStart(2,"0")}:${minutes ? minutes : "00"}`;
};

const toTimeRangeFormat = (range) => {
  const [start,end] = range ?.split("-");
  if (start && end) {
    return toFourDigitTime(start) + " - " + toFourDigitTime(end);
  }

  return range;
};

const time = ["08-10","05:00-05:30"];

const time1 = time.map(str => toTimeRangeFormat(str));

console.log(time1);