gpt4 book ai didi

javascript - moment.js 如何处理闰秒?

转载 作者:数据小太阳 更新时间:2023-10-29 05:31:49 27 4
gpt4 key购买 nike

我需要一种方法来始终将整分钟添加到时间戳中,即使由于计划的闰秒,该分钟长 61 秒也是如此。有谁知道 moment().add(1, 'minute') 是否添加一分钟而不考虑闰秒?或者它总是增加 60 秒?

我发现它如何处理夏令时和闰年的加法运算,但对于闰秒则一无所获。

给出一些关于为什么这很重要的背景:

我需要创建一个 CSV 文件,其中包含各种传感器的一系列每分钟传感器数据,格式如下:

time,sensor1,sensor2
1491329921800,20,21
1491329981800,22,21

我的数据存储有一个小时开始的时间戳,然后是一个包含 60 个数据点的数组。

{
timestamp: Date(2017,2,24,12,0,0),
temperature: [20, 22, 23, ... <60 elements total>]
}

我通过为第一个数据点提供小时的时间戳并将每个后续数据点的值添加 60 秒(因为闰秒总是发生在小时结束时,我只一次做一个小时,这应该没问题)。

然后我需要构建一个字典,将每个时间戳映射到那一刻的值。这是必要的,这样我就可以在 CSV 的右行中获得正确的数据;传感器可能在不同的时间启动,或者可能在某个小时内关闭电源,或者在该小时的某个部分没有报告;我不能假设所有传感器都具有相同的数据。

我正在查找将使用以下代码创建 CSV 的所有时间戳:

    var date = moment(startDate);
var end = endDate.getTime();

var timestamps = [];

while(date.valueOf() < end) {
timestamps.push(date.valueOf());
date.add(1, 'minute')
}
timestamps.push(date.valueOf());

但我不确定它是否安全。如果需要,我可以将 date.add(1, 'minute') 更改为 date.add(1, 'minute').startOf('minute'),但这可能会增加很多执行时间,我想尽可能避免它。

最佳答案

您不必担心这一点,因为 JavaScript 不知道闰秒。考虑这段代码:-

// 1. Initialize date
var newDate = new Date('1 March 1972 11:30:00');

// 2. Convert to milliseconds and add 20 years
var msec = Date.parse(newDate) + 631152000000;

// 3. Convert milliseconds back to normal date format
newDate = new Date(msec);

第 2 步中的大数字是 20 年的毫秒数,由等式 ((15 x 365) + (5 x 366)) x 24 x 60 x 60 x 1000 给出; 15 年@每年 365 天加上 5 年@每年 366 天,每天 24 小时,每小时 60 分钟,每分钟 60 秒,每秒 1000 毫秒。

执行后给出的答案是“1 March 1992 11:30:00”。如果 JavaScript 考虑到闰秒,它将是“1992 年 3 月 1 日 11:30:16”,因为多出了 16 秒(或“1992 年 3 月 1 日 11:29:44”,具体取决于您如何看待它)。

总之,如果您需要知道两个日期之间实际经过了多少毫秒,那么您需要编写一些代码来查找在它们跨越的时间段内发生了多少闰秒(您可以找到原始数据对于那个 here ),但对于正常的时间记录,我们可以愉快地忽略这个不受欢迎的小并发症。

关于javascript - moment.js 如何处理闰秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43216437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com