【问题标题】:How to parse/compare moment objects in react?如何在反应中解析/比较时刻对象?
【发布时间】:2021-02-23 18:02:29
【问题描述】:

我有一个组件,它根据用户可以选择的下拉列表中的各种选择器设置 startDate 和 endDate。
代码如下所示:

  const handleDateOptionChange = option => {
    if (option?.value === "day") {
      setStartDate(moment().startOf("day"));
      setEndDate(moment());
    }

    if (option?.value === "week") {
      setStartDate(moment().startOf("week"));
      setEndDate(moment());
    }

    if (option?.value === "month") {
      setStartDate(moment().startOf("month"));
      setEndDate(moment());
    }

...

    setDateOption(option);
  };

出于我的目的,我正在尝试将 startDate 和 endDate 的值与 moment() 对象进行比较,以便我可以找到一种方法来保持在页面刷新时选中的下拉列表中的正确选择器(我正在抓取 start 和来自 queryParams 的 endDate)。

我有一段代码来测试它,看起来像这样:

 const setDateOption = () => {
    console.log(startDate);
    console.log(moment().startOf("day"));
    if (startDate == moment().startOf("day") && endDate == moment()) {
      return dateOptions[0];
    }
    return dateOptions[1];
  };

显然我正在学习我不能那样比较它们。这些对象的输出如下:

moment 对象的 _d 部分匹配,但我被告知不要使用这些部分进行比较。如何将我的 startDate 与实际的 moment() 类型对象进行比较?

【问题讨论】:

标签: reactjs typescript momentjs


【解决方案1】:

如果你使用的moment版本高于2.0,你可以使用isSame函数:

https://momentjs.com/docs/#/query/is-same/

【讨论】:

    【解决方案2】:

    我可能刚刚回答了我自己的问题。添加 .format() 的工作原理如下:

     console.log(startDate.format());
     console.log(moment().startOf("day").format());
    

    并返回如下输出:

    【讨论】:

    • 您不应期望回答中的问题。答案是对问题的答案。这个问题已经被问过并回答了很多次。将日期转换为字符串并进行比较无疑是比较它们的a 方式。首选?我不会这么说。日期有一个本机值,表示自 1970-01-01T00:00:00.000 以来的毫秒数,比较数字是一种比比较字符串更广为人知和更容易的方法。
    • 我的错。我应该刚刚编辑了原始帖子。对此感到抱歉。
    猜你喜欢
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 2020-12-10
    相关资源
    最近更新 更多