我有一个对应于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);
它们是日期对象,被解析成字符串,用于其他目的,这可以是任何长度,这只是一个例子,我想找到最早的时间戳。
在上面的示例中,这些是转换后的时间戳,最小值基于数字是正确的,但基于日期对象则不是。
946681200000
978303600000
980982000000
983401200000
986076000000
min: 946681200000
'2023-03-15T10:47:38.878Z'
这可能只是一个数学问题,但我理解它的方式,像这样解析的字符串返回一个int,表示自1970年以来经过了多少时间,所以最早的应该最接近那个时间,不是吗?这个min值实际上是最近的时间戳,当我尝试max值时,它也不正确。
4条答案
按热度按时间zpjtge221#
如果所有日期都遵循上述格式,那么对数组进行字符串排序并获取第一个条目就足够了,因为字符串是从最长时间单位到最短时间单位“排序”的。
要获取最早的条目:
7d7tgy0s2#
你可以通过修改循环来解决这个问题。循环应该是这样的:
这应该可以完成您的工作,因为之前的循环迭代数组的键而不是元素本身,这会导致错误的Date解析,因为在这种情况下,它试图解析索引而不是时间戳。
rjee0c153#
由于您处理的是ISO 8601时间戳,因此可以将任何字符串与之进行比较
1.将
lowest
设置为高值字符串a
1.在
timestamps
上循环1.如果电流较低,则覆盖
1.日志
感谢@Derpirscher对此的评论。
实用读物:
erhoui1w4#
for..in用于迭代对象的属性,而不是数组的属性。2如果你在循环中添加console.log(time),你会发现time是一个字符串,代表数组的每个索引。3如果你改为for..,你的代码就可以工作了。
此外,除非您需要转换时间戳用于其他用途,否则您可能只希望在循环中获得最小值。