问题描述
%a=5;
aa bbbb
另一个像这样:
const seatGeekEvents = [
{
datetime_local: "2020-09-15T20:00:00",venue: {
name: "House of Blues - Boston",},]; ...
我想创建一个函数,该函数可查看数组中的对象,找出对象中的时间值是否相同,如果相同,则从具有匹配时间的对象中返回数据。稍后,我将使用HTML显示数据。
这里的最终目标是使用事件开始时的天气数据制作事件数据的html表。这些对象是从提取返回的响应。
这是我想找到匹配项的功能:
const hourlyForecast = [
{
clouds: 40,dt: 1600200000,temp: 67.44,]; ...
我用来覆盖dt和datetime_local的格式化功能看起来像这样
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));
我想了解为什么我的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,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());
请注意,如果您想比较同一天的事件,则可能需要弄清楚如何处理不同的时区以及“同一天”的含义。