如何在 JavaScript 中的日期对象数组中找到最早的日期?

问题描述 投票:0回答:3

我有一个对应于 Date 对象的字符串数组。像这样:

const timestamps =  [
  '2023-03-15T10:47:38.878Z',
  '2023-03-15T10:46:51.375Z',
  '2023-03-15T10:46:39.645Z',
  '2023-03-15T10:47:19.072Z',
  '2023-03-15T10:46:20.395Z'
]

var convertedTimestamps = [];
for (var time in timestamps) {
  var timeAsDate = Date.parse(time);
  console.log(time, timeAsDate);
  convertedTimestamps.push(timeAsDate);
}
const min = Math.min(...convertedTimestamps);

它们是为了其他目的解析成字符串的Date对象 这实际上可以是任何长度,这只是它的一个实例。我想找到最旧的时间戳。

在上面的例子中,这些是转换后的时间戳,根据数字,最小值是正确的,但不是日期对象。最上面的就是去掉的那个

946681200000
978303600000
980982000000
983401200000
986076000000
min: 946681200000
'2023-03-15T10:47:38.878Z'

这可能只是一道数学题,但据我了解,像这样解析的字符串会返回一个 int,表示自 1970 年以来已经过了多少时间等,所以最老的时间应该最接近那个时间,不是吗?这个最小值实际上是最新的时间戳。当我尝试最大值时,它也不正确。

javascript arrays date date-parsing
3个回答
0
投票

如果所有日期都遵循上述格式,则对该数组进行字符串排序并获得第一个条目就足够了,因为字符串是从最长时间单位到最短时间单位“排序”的。

所以要获得最旧的条目:

const timestamps =  [
  '2023-03-15T10:47:38.878Z',
  '2023-03-15T10:46:51.375Z',
  '2023-03-15T10:46:39.645Z',
  '2023-03-15T10:47:19.072Z',
  '2023-03-15T10:46:20.395Z'
];
const lowest = timestamps.sort()[0];

0
投票

认为你可以通过在你的案例中调整循环来解决这个问题。循环应该是这样的:

for (var i = 0; i < timestamps.length; i++) {
    var timeAsDate = Date.parse(timestamps[i]); # just adapted this to the loop
    ...
}

这应该适合您的情况,因为循环 before 遍历数组的键而不是元素本身,这会导致不正确的日期解析,因为在这种情况下它会尝试解析索引而不是时间戳。


0
投票

由于您处理的是 ISO 8601 时间戳,因此您可以将任何字符串与它进行比较

  1. 设置
    lowest
    a
    ,高值字符串
  2. 循环
    timestamps
  3. 如果电流较低,覆盖
  4. 日志

const timestamps = [
  '2023-03-15T10:47:38.878Z',
  '2023-03-15T10:46:51.375Z',
  '2023-03-15T10:46:39.645Z',
  '2023-03-15T10:47:19.072Z',
  '2023-03-15T10:46:20.395Z'
];
let lowest = 'a';

for (let timestamp of timestamps) {
    if (lowest > timestamp) {
        lowest = timestamp;
    }
}

console.log('Lowest timestamp: ' + lowest)
// Lowest timestamp: 2023-03-15T10:46:20.395Z


感谢 @Derpirscher commenting this.


有用的读物:

© www.soinside.com 2019 - 2024. All rights reserved.