问题描述
我的前端应用使用 React。
我有两种不同的时间格式的数据。
大多数时间格式数据是这样的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);