我有两个包含对象的数组。一个看起来像这样:
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表。对象是从获取返回的响应。
这是我想找到匹配项的功能:
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()返回一个空数组。这只是时间格式问题吗?谢谢
“ 1600200000”可能是自1970-01-01开始的时间值(以秒为单位),如果它是UTC,则解析为“ 2020-09-15T20:00:00.000Z”。
-14400的偏移量也可能是秒,其解析为-4:00。因此,似乎“ 1600200000”是偏移量-14400的本地时间值,该值与纽约的当前偏移量匹配。
给定时间戳为“ 2020-09-15T20:00:00”且偏移量为-14400,您应将字符串解析为UTC,然后使用偏移量对其进行调整以获取一个可以与其他日期进行比较的日期。
例如
/** Parse timestamp as UTC and apply provided offset
* @param {string} timestamp - ISO 8601 format, no timezone
* @param {number} offset - Offset from UTC in seconds
* @returns {Date} for timestamp and offset
*/
function parseISO(timestamp, offset) {
// Get values from timestamp
let [Y,M,D,H,m,s] = timestamp.split(/\D/);
// Parse as if UTC
let date = new Date(Date.UTC(Y, M-1, D, H, m, s));
// Apply offset to adjust to actual UTC
date.setUTCSeconds(date.getUTCSeconds() - offset);
return date;
}
let timestamp = '2020-09-15T20:00:00';
let offset = -14400;
let date = parseISO(timestamp, offset);
console.log('New York: ' + date.toLocaleString('default', {timeZone:'America/New_York'}));
console.log('UTC : ' + date.toISOString());
请注意,如果要比较同一天的事件,则可能需要弄清楚如何处理不同的时区以及“同一天”的含义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句