Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从日期数组中获取最新日期Javascript/Typescript_Javascript_Arrays_Typescript_Date - Fatal编程技术网

如何从日期数组中获取最新日期Javascript/Typescript

如何从日期数组中获取最新日期Javascript/Typescript,javascript,arrays,typescript,date,Javascript,Arrays,Typescript,Date,我有一系列这样的日期 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 con

我有一系列这样的日期

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
  })
-然后对它们进行分类,并通过另一个函数获得最大的时间:

getLatestPayment(convertedArr){

const sortFromHighest = arr => {
  return arr.sort( (a,b) => { return a < b } )
}
var convertedArr = convertedArr
convertedArr = sortFromHighest(convertedArr)
convertedArr = convertedArr.map( elem =>{
  new Date(elem)
})

return paymentsArr[0]
getLatestPayment(convertedArr){
const sortFromHighest=arr=>{
返回arr.sort((a,b)=>{returna{
新日期(elem)
})
退货付款额为[0]
}


然后我得到了一个未定义的值,因为我不能这样做,将日期从时间转换回日期,是否有一种实际的方法来获取日期?或者是一个不同的解决方案?提前感谢

只需在排序之前将其作为日期对象;不要对它们调用
getTime()
,因为您已经可以将日期与

进行比较,如果您想要原始字符串值,可以在sorter中创建日期对象并跳过映射

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)=>newdate(b)-newdate(a))[0];

console.log(getLatest(arr))
您还可以使用更具功能性的方法:

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))
如果您有UTC ISO 8601字符串,它们将按字符串排序。因此,只需对它们进行排序并获取第一个或最后一个元素,这取决于您想要的是最早的日期还是最新的日期

如果您想将结果作为日期,只需转换最后一个(但请注意

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”
];
log('Oldest:'+arr.sort().slice(0,1));
log('Newest:'+arr.sort().slice(-1));

console.log('latest:'+new Date(arr.sort().slice(-1)).toString());
仅将它们作为字符串进行排序可能存在重复。为什么使用日期减法进行索引?应该是
因为输入:
var arr=[“2018-08-01T19:16:34.791Z”,“2011-08-01T11:11:34.791Z”,“2018-08-01T15:16:34.791Z”]
您的代码返回最小的日期。哎呀…我的错。更改为
新日期(b)-新日期(a)
以反转排序…然后您想要第一个您根本不需要转换为日期的日期,
arr.sort()
按原样工作。;-)这看起来真的很漂亮,谢谢,我正在努力改进这一点。为什么要转换为日期呢?只需将它们按字符串排序,这是使用ISO 8601格式的主要好处之一。@RobG这是我第一次尝试并希望将其作为解决方案发布,但它不是通用的。如果日期格式改变,只要它是一个有效的格式,这个
就应该
起作用。“应该”是有问题的,如果日期格式改变,内置的解析器可能无论如何都不起作用:“只把它们作为日期对象…”我想你的意思是把它们作为字符串保留,它们在没有任何转换的情况下可以完美排序。不,我的意思是将它们作为日期对象,因为他给出的代码试图在最后返回一个日期对象,而不是字符串。因此,只需将单个字符串转换为日期,而不是将它们全部转换。如果被否决的投票人愿意解释他们的投票,我也许可以改进答案。