Zac*_*obi 6 javascript momentjs
我需要一种方法来始终为时间戳添加一分钟,即使由于计划的闰秒,分钟长度为61秒.有谁知道如果不moment().add(1, 'minute')加闰秒增加一分钟?或者它总是添加六十秒?
我已经发现它如何处理夏令时和闰年的增加,但对闰秒没有任何影响.
提供一些背景知识,说明这一点很重要:
我需要创建一个CSV文件,其中包含一系列用于各种传感器的每分钟传感器数据,格式如下:
time,sensor1,sensor2
1491329921800,20,21
1491329981800,22,21
Run Code Online (Sandbox Code Playgroud)
我的数据与一小时开始的时间戳一起存储,然后是一小时的60个数据点的数组.
{
timestamp: Date(2017,2,24,12,0,0),
temperature: [20, 22, 23, ... <60 elements total>]
}
Run Code Online (Sandbox Code Playgroud)
我把它变成了一堆时间戳的数据,给第一个数据点一小时的时间戳,并为每个后续数据点增加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());
Run Code Online (Sandbox Code Playgroud)
但我不确定它是否安全.如果我需要,我可以date.add(1, 'minute')改为date.add(1, 'minute').startOf('minute'),但这可能会增加很多执行时间,如果可能的话我想避免它.
小智 4
您无需担心这一点,因为 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);
Run Code Online (Sandbox Code Playgroud)
步骤 #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 考虑了闰秒,那么它将是“1 March 1992 11:30:16”,因为发生了 16 秒的额外时间(或者“1 March 1992 11:29:44”,具体取决于你如何看待它)。
总之,如果您需要知道两个日期之间实际经过了多少毫秒,那么您需要编写一些代码来查找它们跨越的时间段内发生了多少闰秒(您可以在此处找到原始数据)),但是对于正常的时间记录,我们可以愉快地忽略这个不受欢迎的小复杂情况。
| 归档时间: |
|
| 查看次数: |
460 次 |
| 最近记录: |