【问题标题】:javascript - join 2 array of datejavascript - 加入2个日期数组
【发布时间】:2018-09-04 10:46:35
【问题描述】:

我对 Javascript 中的 DateTime 有疑问。我的问题是我有 2 个数组 DateTime 范围。例如:

var list1 = [
    {start: 2018-08-28 00:00:00, end: 2018-08-28 04:00:00},
    {start: 2018-08-28 04:00:00, end: 2018-08-28 10:00:00},
    {start: 2018-08-28 12:00:00, end: 2018-08-28 14:00:00},
    {start: 2018-08-28 20:00:00, end: 2018-08-28 22:00:00},
];

var list2 = [
    {start: 2018-08-28 03:00:00, end: 2018-08-28 06:00:00},
    {start: 2018-08-28 11:00:00, end: 2018-08-28 11:30:00},
    {start: 2018-08-28 13:00:00, end: 2018-08-28 17:00:00},
];

合并两个列表后,结果将是:

result = [
    {start: 2018-08-28 00:00:00, end: 2018-08-28 03:00:00},
    {start: 2018-08-28 03:00:00, end: 2018-08-28 04:00:00},
    {start: 2018-08-28 04:00:00, end: 2018-08-28 06:00:00},
    {start: 2018-08-28 06:00:00, end: 2018-08-28 10:00:00},

    {start: 2018-08-28 11:00:00, end: 2018-08-28 11:30:00},

    {start: 2018-08-28 12:00:00, end: 2018-08-28 13:00:00},
    {start: 2018-08-28 13:00:00, end: 2018-08-28 14:00:00},
    {start: 2018-08-28 14:00:00, end: 2018-08-28 17:00:00},

    {start: 2018-08-28 20:00:00, end: 2018-08-28 22:00:00},
];

更新:

这是一个组合问题,而不是排序问题。例如:从 1:00 - 3:00 与 2:00 - 5:00 结合,结果将是:[1:00 - 2:00, 2:00 - 3:00, 3:00 - 5:00] .

如果您有任何想法,请告诉我。

提前谢谢你!

【问题讨论】:

  • 嘿,我也有类似的问题。您找到解决方案了吗?如果是,您可以发布解决方案。
  • @n1th1l:我自己写了一个代码,没有库支持。希望我的回答能对你有所帮助
  • 嘿,能不能在这里提一下这个答案
  • @n1th1l:这是一个私人密码,所以我不能在这里过去
  • 不用担心,我的问题陈述现在改变了。

标签: javascript arrays datetime momentjs


【解决方案1】:

您可以使用 Array.concat 组合两个数组,然后使用自定义比较器对它们进行适当的排序。

const output = list1.concat(list2).sort((a, b) => a.start - b.start);

【讨论】:

  • 感谢您的评论。问题是这不是排序问题。我尝试在内部将 2 个数组与 DateTime 结合起来。您可以仔细查看结果以查看它:)
【解决方案2】:

现在建议使用 ES6 语法来连接 2 个数组:示例如下

result = [...list1, ...list2];
result.sort(function(a,b){
 // Turn your strings into dates and then subtract them
  // to get a value that is either negative, positive, or zero.
  return new Date(b.start) - new Date(a.start);
});

【讨论】:

  • 感谢您的评论。问题是这不是排序问题。我尝试在内部将 2 个数组与 DateTime 结合起来。您可以仔细查看结果以查看它:)
【解决方案3】:

这里的问题是您有一个日期,而不是数字字符串,这就是排序不起作用的原因。您可以将日期设为字符串:

var list1 = [
    {start: "2018-08-28 00:00:00", end: "2018-08-28 04:00:00"},
    {start: "2018-08-28 04:00:00", end: "2018-08-28 10:00:00"},
    {start: "2018-08-28 12:00:00", end: "2018-08-28 14:00:00"},
    {start: "2018-08-28 20:00:00", end: "2018-08-28 22:00:00"},
];

var list2 = [
    {start: "2018-08-28 03:00:00", end: "2018-08-28 06:00:00"},
    {start: "2018-08-28 11:00:00", end: "2018-08-28 11:30:00"},
    {start: "2018-08-28 13:00:00", end: "2018-08-28 17:00:00"},
];

var result = list1.concat(list2).sort((a, b) => new Date(a.start) - new Date(b.start));
console.log(result)

【讨论】:

  • 感谢您的评论。问题是这不是排序问题。我尝试在内部将 2 个数组与 DateTime 结合起来。您可以仔细查看结果以查看它:)
猜你喜欢
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
相关资源
最近更新 更多