【问题标题】:having trouble with luxon, calculating time difference between 2 datesluxon 遇到问题,计算两个日期之间的时间差
【发布时间】:2021-07-18 05:50:03
【问题描述】:

StackOverflow 的好心人,我遇到了 luxon 的问题(我想我设置错误或做错了什么),现在它无法计算未来的日期(说 NaN),以及过去的日期考虑到年份,你会得到这样的结果:

[

我想要这段代码做的是关注月份和日期(忘记年份),如果过去的日期距离今天的日期还有 7 天或距离今天的日期不到 7 天,请说“过去的日期是

代码:

const isBirthdayThisWeek = (birthDate) => {
  const endDate = DateTime.now()
  const startDate = DateTime.fromISO(birthDate)
  const interval = Interval.fromDateTimes(startDate, endDate)
  const dateDifference = interval.length('days')
  const wholeNumberedDateDifference = Math.round(dateDifference)
  wholeNumberedDateDifference <= 7
    ? console.log('bday is in less than a week', wholeNumberedDateDifference)
    : wholeNumberedDateDifference > 7
      ? console.log('bday is more than in a week', wholeNumberedDateDifference)
      : console.log('something went wrong', wholeNumberedDateDifference)
}

提前谢谢大家。

【问题讨论】:

  • 我将您的代码复制/粘贴到正在运行的 codesandbox 中,并且对于给定日期 "2021-04-16" 到现在,约为 7.9 天,大于 7。我看到了正确的输出。跨度>
  • 哦,我明白了,如果您选择相同的开始日期和结束日期,则间隔长度为NaN。

标签: javascript reactjs momentjs luxon


【解决方案1】:

您可以使用计算持续时间的大小。持续时间适用于未来和过去的两个时间间隔。将开始日期调整为“捕捉”到当前年份,这样日期差异就不会跨越年份边界。

import { DateTime } from "luxon";

const startDate = DateTime.fromISO("2000-04-26").set({
  year: DateTime.now().get("year")
});
const diff = Math.abs(startDate.diffNow().as('day'));
const wholeNumberedDateDifference = Math.round(diff);
if (diff <= 7) {
  console.log("bday is in less than a week", wholeNumberedDateDifference);
} else {
  console.log("bday is more than in a week", wholeNumberedDateDifference);
}

输出

bday is in less than a week 2

演示

【讨论】:

  • 谢谢,它现在适用于未来的日期,但仍然不适用于过去的日期 const startDate = DateTime.fromISO('2020-04-26') bday is more than in a week 363抱歉 Idk 也许我使用了错误的插件或者我提出了错误的问题?我想要做的是计算月份和日期而不考虑年份,所以如果我的朋友出生于 1988 年,它仍然会打印到控制台 2 天而不是 12051 天。
  • const startDate = DateTime.fromISO("2000-04-26"); const diff = Math.abs(startDate.diffNow().as("day"));常量 WholeNumberedDateDifference = Math.round(diff); if (diff
  • @eliasbnk 我看不出有什么问题......它计算从现在开始到某个日期的差异,获取天数,天数可以小于或等于 7 天(一周)或大于。您希望有什么不同的工作方式?
  • @David Reese 抱歉,我不擅长表达自己的想法。我想正因为如此,我们有些误解。如果你传递给 DateTime.fromISO();生日 1988-04-26 它将打印出 12051 天,这是天之间的正确差异,并且您的函数可以很好地计算它。但我不知道如何告诉函数只计算月和日之间的差异(将其视为同一年)所以如果我通过了 1988-04-26 或 2020-04-26 或 1999- 04-26 无论年份如何,它都会打印出 2 天。感谢您对我如此耐心和友善。
  • 你是最棒的,非常感谢。祝你一切顺利。
猜你喜欢
  • 2021-05-12
  • 2022-09-24
  • 2020-12-25
  • 2021-11-25
  • 2011-08-01
  • 2022-01-01
  • 2021-08-14
  • 1970-01-01
相关资源
最近更新 更多