【问题标题】:Find max and min date from an array of date strings从日期字符串数组中查找最大和最小日期
【发布时间】:2021-03-12 11:46:46
【问题描述】:

我有一个如下的对象数组

data = [
 {
  mas_name: (...),
  mas_plan_end: (...) // 'YYYY-MM-DD' eg: '2021-03-19'
  mas_plan_start: (...) // 'YYYY-MM-DD' eg: '2021-03-19'
  ...
 },
 {
  mas_name: (...),
  mas_plan_end: (...) 
  mas_plan_start: (...)
  ...
 }
]

在上面的数组中,一些对象甚至可能包含 mas_plan_start 为 null.. 我需要从此数组中获取 mas_plan_start 的最小值和最大值。 我尝试通过以下方式使用时刻

const max = moment.max(children.map((o) =>
          o.mas_plan_start ? o.mas_plan_start : moment(new Date()).format("YYYY-MM-DD")
        )) ;

const min = moment.min(children.map((o) =>
          o.mas_plan_start ? o.mas_plan_start : moment(new Date()).format("YYYY-MM-DD")
        )) ;

但是它给了我这个错误

我该如何解决这个问题,...或者有什么方法可以在不使用时刻的情况下做到这一点。

解决方案:

const max_date = moment.max(data.filter((o) =>
          o.mas_plan_end !== null
        ).map((date) =>
        moment(date.mas_plan_end, 'YYYY-MM-DD') // converting to moment instance so that .max command will work
        ));
      parent.mas_plan_end = max_date._i; // to get the date String back from the moment instance

【问题讨论】:

  • "不使用时刻" - 获取所有日期字符串并对其进行排序。使用给定的格式,第一个元素将是 min,最后一个元素是 max
  • 是的,如果我按升序对其进行排序..第一个元素将是最小元素,最后一个元素将是最大元素......但是我将如何对日期字符串执行这种排序?
  • moment.min(): “返回给定时刻实例的最小值(最远的过去)。”.max() 相同) - 你正在传递一个字符串数组。
  • 我已经发布了文档的相关部分(+ 链接),甚至突出了重要部分。 时刻实例不是字符串。

标签: javascript arrays vue.js vuejs2 momentjs


【解决方案1】:

我之前没有使用过moment.js,但从你的代码来看,我认为这就是它用于格式化日期的方式

const max = moment(data.map(obj => new Date(obj.mas_plan_end ?? '')).reduce((a, b) => b > a ? b : a)).format("YYYY-MM-DD");
const min = moment(data.map(obj => new Date(obj.mas_plan_start ?? '')).reduce((a, b) => b < a ? b : a)).format("YYYY-MM-DD");

我使用的?? 运算符称为nullish coalescing operator,如果第一个值为空或未定义,它会返回第二个值。 Nullish Coalescing MDN

【讨论】:

  • 这不起作用,但无论如何感谢您发布解决方案。我已经更新了上面的解决方案,请检查
  • 您没有将 moment 实例传递给 min 和 Max 函数
  • 我通过数据数组进行映射以获取最大和最小日期,然后我找到更大和更小的日期,然后将其传递给 moment 函数来格式化它......答案错了吗?跨度>
猜你喜欢
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 2019-03-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多