【问题标题】:compare only dates with luxon Datetime仅将日期与 luxon Datetime 进行比较
【发布时间】:2020-05-20 08:18:22
【问题描述】:

我有两个 luxon 对象,

let startDate = DateTime.fromISO(startDate)
let someDate = DateTime.fromISO(someDate)

如果 someDate 是

【问题讨论】:

  • 您在使用<> 时遇到问题吗?来自手册的 luxon Comparing DateTimes 部分:DateTime 实现 #valueOf 以返回纪元时间戳,因此您可以将 DateTimes 与 <><=>= 进行比较。这可以让您了解一个 DateTime 是在另一个 DateTime 之后还是之前。
  • 对不起,我已经更新了我的问题
  • startDatesomeDate的值分别是什么?也许您可以使用startOf,但我认为无论何时,如果日期早于另一个日期,您将使用<><=>= 得到正确的结果

标签: javascript luxon


【解决方案1】:

要仅比较日期,请使用startOf

startDate.startOf("day") <= someDate.startOf("day")

【讨论】:

  • 这非常有效。谢谢:)
【解决方案2】:

文档:https://moment.github.io/luxon/#/math?id=comparing-datetimes

var DateTime = luxon.DateTime;

var d1 = DateTime.fromISO('2017-04-30');
var d2 = DateTime.fromISO('2017-04-01');

console.log(d2 < d1); //=> true
console.log(d2 > d1); //=> false
&lt;script src="https://moment.github.io/luxon/global/luxon.min.js"&gt;&lt;/script&gt;

【讨论】:

    【解决方案3】:

    使用ordinal 以整数形式获取一年中的哪一天,参见https://moment.github.io/luxon/docs/class/src/datetime.js~DateTime.html#instance-get-ordinal

    startDate.ordinal <= someDate.ordinal
    

    【讨论】:

    • 接受的答案对我不起作用,但确实如此。谢谢!
    • 这是一个有点危险的答案;如果 startDate 与 someDate 的年份不同,则所有赌注都将取消。例如,它会认为 2021 年 1 月 1 日在 2020 年 12 月 31 日之前。
    【解决方案4】:

    这些答案都不适用于闰年。我发现以下成功,

    function dateTimesAreSameDay(dateTime1, dateTime2) {
      return dateTime1.month === dateTime2.month && dateTime1.day === dateTime2.day;
    }
    

    【讨论】:

      【解决方案5】:

      this github 问题提出的另一个选项可能是创建您自己的 Date 类:

      Luxon 不支持 [单独的 Date 类],但通过组合很容易做到:创建一个包装 DateTime 并公开您需要的方法子集的 Date 类。你可以决定你需要为你的应用程序提供多纯的抽象(即你想要做多少工作来使你的包装器功能齐全和纯洁)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-12
        • 2016-03-28
        • 2011-06-04
        • 2016-07-24
        相关资源
        最近更新 更多