如何比较来自不同对象的两个日期值,设置它们的格式并测试是否相等?

老人

我有两个包含对象的数组。一个看起来像这样:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将多行与来自两个不同表的其他行进行比较并检查它们是否相等?

在地址比较下,具有自动存储持续时间的两个不同对象是否可以相等?

如何比较两个DynamicJsonObjects以检查它们是否相等?

如何比较两个ctypes对象是否相等?

如何测试mongodb条件对象中两个外部值是否相等?

来自具有相同键的两个不同对象的 ruby/merge-sum 值

如何比较两个不同格式的日期?

如何比较两个值并检查它们是否相似

流口水:如何比较流口水中两个不同对象的属性?

比较两个比较大的对象是否相等

当两个选项包含可以测试相等性的值时,测试它们是否相等的最惯用的方法是什么?

将来自两个不同对象键的值组合为一个对象键值

如何比较具有相同对象属性的两个值?

如何使用PowerShell比较两个文本文件以查看它们是否相等?

比较两个集合是否相等,无论它们中的项顺序如何

如何编写一个JUnit测试来比较两个对象列表的相等性?

如何合并两个不同对象的列表?

如何合并两个不同对象的列表?

如何使用Java 8流将两个或更多不同对象列表的值设置为一个对象?

如何比较两个不同的日期?

按某些两个字段比较不同对象的两个列表

两个不同对象的总和

比较两个日期时间对象以查看它们是否最多相隔 2 分钟

C#比较两个对象是否相等

比较两个 json 值是否相等

如何比较两个不同变量的类类型是否相等?

合并来自两个不同对象数组的具有相应键值的对象

比较两个整数对象是否相等,无论类型如何

根据它们的值比较两个不同的类