if NOW if 在两个日期时间之间的逻辑

Logic for if NOW if between two date-times

我正在为广播节目制作时间表,我需要显示当前正在直播的节目。 目前它从开始时间开始工作,但在结束时间之后仍然显示“实时”。

此屏幕截图拍摄于 10:12am

我正在使用 date-fns 库。 时间表数据形状如下。

"shows": [
    {
      "artist": "Set & Setting ",
      "starts_at": "2020-06-29T07:00:00.000Z",
      "ends_at": "2020-06-29T08:00:00.000Z",
      "description": "w/ JD"
    },
    {
      "artist": "Set & Setting ",
      "starts_at": "2020-06-29T08:00:00.000Z",
      "ends_at": "2020-06-29T09:00:00.000Z",
      "description": "w/ JD"
    },
    {
      "artist": "The Great Stuff",
      "starts_at": "2020-07-16T21:00:00.000Z",
      "ends_at": "2020-07-16T13:00:00.000Z",
      "description": "w/ ??"
    },
    {
      "artist": "The Melting Pot ",
      "starts_at": "2020-07-16T17:00:00.000Z",
      "ends_at": "2020-07-16T19:00:00.000Z",
      "description": "w/ Tom B"
    }
  ]

如果迭代中的当前项目是活动的,我的逻辑是

...
import { startOfToday, parseISO, getHours, getMinutes, sub } from "date-fns"
...

const now = new Date();
const { starts_at, ends_at } = item;
const liveNow =  (
        (getHours(now) >= getHours(parseISO(starts_at)) && getMinutes(now) >= getMinutes(parseISO(starts_at))) &&
        (getHours(now) <= getHours(parseISO(ends_at)) && getMinutes(now) <= getMinutes(sub(parseISO(ends_at), { minutes: 1 })))
);

尝试使用: 版本 2.0.0 之前:

isWithinRange(date, startDate, endDate)

示例:

const liveNow = isWithinRange(now, parseISO(starts_at), parseISO(ends_at))

2.0.0 之后:

isWithinInterval(date, interval, [options])

示例:

const liveNow = isWithinInterval(
  now,
  { start: parseISO(starts_at), end: parseISO(ends_at) }
)

祝你好运!