【发布时间】:2020-09-12 20:45:08
【问题描述】:
我有两个包含对象的数组。一个看起来像这样:
const seatGeekEvents = [
{
datetime_local: "2020-09-15T20:00:00",
venue: {
name: "House of Blues - Boston",
},
},
]; ...
还有一个是这样的:
const hourlyForecast = [
{
clouds: 40,
dt: 1600200000,
temp: 67.44,
},
]; ...
我想创建一个函数来查看数组中的对象,找出对象中的时间值是否相同,如果相同,则返回具有匹配时间的对象中的数据。稍后,我将使用 HTML 显示数据。
这里的最终目标是制作一个包含事件开始时间的天气数据的事件数据 html 表。对象是从 fetch 返回的响应。
这是我想出的查找匹配项的函数:
const getDataToDisplay = (seatGeekEvents, hourlyForecast) => {
const dataToDisplay = [];
for (i = 0; i < seatGeekEvents.length; i++) {
const matches = [];
for (j = 0; j < hourlyForecast.length; j++) {
if (
formatEventTime(seatGeekEvents[i].datetime_local) ===
formatWeatherTime(hourlyForecast[j].dt)
) {
matches.push(seatGeekEvents[i], hourlyForecast[j]);
}
}
return matches;
}
return dataToDisplay;
};
console.log(getDataToDisplay(seatGeekEvents, hourlyForecast));
我用于转换 dt 和 datetime_local 的格式化函数如下所示
const formatEventTime = (startTimeUTC) => {
const date = new Date(startTimeUTC);
return date.toLocaleTimeString("en-US", {
hour: "2-digit",
minute: "2-digit",
weekday: "long",
});
};
const formatWeatherTime = (forecastTimeStamp) => {
const milliseconds = forecastTimeStamp * 1000;
const dateObject = new Date(milliseconds);
return dateObject.toLocaleTimeString("en-US", {
hour: "2-digit",
minute: "2-digit",
weekday: "long",
});
};
我想了解为什么我的 getDataToDisplay() 返回一个空数组。这只是时间格式问题吗?谢谢
【问题讨论】:
-
"2020-09-15T20:00:00" 没有关联的偏移量,因此在每个不同的地方以不同的偏移量表示不同的时间点。 1600200000 可能是自 1970-01-01 以来的以秒为单位的时间值(使其表示“2020-09-15T20:00:00.000Z”),这是一个独特的时间点。您希望如何处理第一个时间戳?
-
不要使用内置解析器。 "2020-09-15T20:00:00" 应该被视为本地,但 Safari 将其视为 UTC。
-
谢谢@RobG。我希望如何处理第一个时间戳?我是从处理第一个时间戳还是第二个时间戳开始是任意的。我认为我的主要问题是我只是不知道如何在 vanilla js 中将 Unix 与 UTC 进行比较。 (在这种情况下,我受香草的约束)
-
@RobG 感谢您让我了解 Safari 的内置解析器。目前正在使用 Chrome。将记录处理这两种浏览器。
-
@RobG 我更仔细地查看了天气响应。我的获取是针对美国/纽约时区的,如果在这里有用的话,
timezone_offset: -14400。
标签: javascript datetime for-loop object