首页 > 解决方案 > 使用 moment.js 查找与今天日期匹配的对象的索引

问题描述

我正在尝试在包含与当前日期匹配的时间戳的数组中查找对象的索引。今天是 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)由于时区偏移, using 会在前一天评估它,所以我返回的索引会太高,因为它会提前一天进行评估。

数据

[{
  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"
 },
]

标签: javascripttypescriptmomentjslodash

解决方案


您应该将时间设置为 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()
})

推荐阅读