如何从一系列日期中获取最新日期? -Javascript / Typescript

时间:2018-08-02 22:06:27

标签: javascript arrays typescript date

我有一系列这样的日期

#!/bin/bash

num=0
for file in *.txt ; do
    twarc hydrate "$(file)" > tweets"$(num)".jsonl
    num=$(( num + num ))
done

所以我尝试将这些日期转换为时间:

arr = ["2018-08-01T15:16:34.791Z","2018-08-01T15:16:34.791Z","2018-08- 
01T15:16:34.791Z"]

-然后将它们整理出来,并通过另一个功能获得最多的时间:

convertedArr = arr.map( payment => {
    var converted
    converted = new Date(payment.date_updated).getTime()
    return converted
  })

}

然后,我得到一个未定义的值,因为我无法执行此操作,因此无法将时间从日期转换回日期,是否有实际方法可以使时间从日期获取?或不同的解决方案?预先感谢

4 个答案:

答案 0 :(得分:0)

在排序之前,只需将它们保留为Date对象即可;不要在它们上调用getTime(),因为您已经可以将日期与<>

进行比较

答案 1 :(得分:0)

如果您希望原始字符串值可以在排序器中创建日期对象并跳过映射

const arr = ["2018-08-01T15:16:34.791Z","2018-08-01T15:16:34.791Z","2018-08-01T15:16:34.791Z"];

const getLatest = (arr) => arr.sort((a,b) => new Date(b) - new Date(a))[0];

console.log(getLatest(arr))

答案 2 :(得分:0)

您还可以采用更多functional连锁方法:

var arr = ["2011-08-01T19:16:34.791Z","2018-08-01T11:11:34.791Z","2012-08-01T15:16:34.791Z"]

console.log(arr.map((x) => new Date(x)).sort().slice(-1))

但是对于非常大型阵列而言,性能会较差。

答案 3 :(得分:0)

鉴于您拥有UTC ISO 8601字符串,它们将作为字符串排序。因此,只需对它们进行排序即可,并根据需要的最旧或最新日期来获取第一个或最后一个元素。

如果要将结果作为日期,只需转换最后一个(但请注意Why does Date.parse give incorrect results?

var arr = [
    "2018-08-01T15:16:35.791Z",
    "2018-08-01T15:16:34.791Z",
    "2018-08-05T15:16:34.791Z",
    "2018-08-02T15:16:34.791Z"
    ];
    
console.log('Oldest: ' + arr.sort().slice(0,1));
console.log('Newest: ' + arr.sort().slice(-1));
console.log('Newest: ' + new Date(arr.sort().slice(-1)).toString());