オブジェクトを含む2つの配列があります。1つは次のようになります。
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]
コメントを追加