【问题标题】:Using moment.js to find the index of an object matching today's date使用 moment.js 查找与今天日期匹配的对象的索引
【发布时间】:2021-05-01 17:35:06
【问题描述】:

我试图在包含与当前日期匹配的时间戳的数组中查找对象的索引。今天是 27 号,所以根据我的数据集,它应该返回第一个索引。我尝试了两种解决方案,但由于不同的原因,这两种解决方案都不起作用。我愿意使用任何一种方法的解决方案。

我尝试过使用完全匹配的字符串。

const index = _.findIndex(data, function(day) { 
   return day.timestampUtc === moment().startOf('day').toISOString() })

上述方法不起作用,因为它试图将2021-01-27T00:00:00Z 匹配到永远不会捕获的2021-01-27T06:00:00.000Z,因为它会返回未定义。

我也试过

const index = _.findIndex(data, function(day) { 
   return moment(day.timestampUtc).day() === moment().day() }) //should return 1, but returns 2

这个不起作用,因为使用 moment(day.timestampUtc) 会因为时区偏移而将其评估到前一天,所以我返回的索引会太高,因为它会提前一天进行评估。

数据

[{
  timestampUtc: "2021-01-26T00:00:00Z"
  weatherCodeType: "FLURRIES"
 },
 {
  timestampUtc: "2021-01-27T00:00:00Z"
  weatherCodeType: "RAIN"
 }, //I want this one
{
  timestampUtc: "2021-01-28T00:00:00Z"
  weatherCodeType: "SNOW"
 },
]

【问题讨论】:

    标签: javascript typescript momentjs lodash


    【解决方案1】:

    您应该将时间设置为 0,我认为最好比较值,而不是字符串:

    index = _.findIndex(data, (day) => {
      var today = moment().utc()
      today.set({ hour: 0, minute: 0, second: 0, millisecond: 0 })
      return moment.utc(day.timestampUtc).valueOf() === today.valueOf()
    })
    

    【讨论】:

      猜你喜欢
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      • 2021-04-11
      相关资源
      最近更新 更多