如何及时移动 javascript 中的时间戳数组?
How can I shift in time an array of timestamps in javascript?
我有一个这样创建的时间对象数组:
let event = new Date()
这些事件是超时创建的,例如:
- 创建第一个事件*
- 2 秒后创建了另一个事件
- 5 秒后另一个事件
- 3 秒后创建另一个等...
所以每个时间对象都有对应的创建时间。
明显是过去发生的事件,还有第一个事件。
它们都存储在一个数组中,例如:[event1, event2, event3...]
事件是函数 new Date()
returns.
的对象
我怎样才能移动所有这些事件,以便它们在未来开始?
未来我的意思是,例如每当执行事件、点击等...
我怎样才能将他们的时间平均转移到所有事件都按相同的顺序进行,但从未来开始。
就像录音一样,正在回放
谢谢
var events = [...];
var firstEvent = events[0];
var now = new Date();
var oldestEventAge = now.getTime() - firstEvent.getTime();
var hour = 1000 * 60 * 60;
for (let e of events) {
e.setTime(e.getTime() + oldestEventAge + hour);
}
在这里我们得到第一个事件并计算从现在到它之间发生了多少毫秒。即它多大了。
那我们定义1小时为毫秒。这就是我们将第一个事件推向未来的程度。
然后对于每个事件,我们将其当前时间(以毫秒为单位)加上最早事件的时间加上一小时。
这将导致最早的事件在未来 1 小时发生,所有后续事件与最早事件的距离相同,也在未来。
显然将 hour
的值更改为您希望第一个事件在未来发生的时间。
虽然日期处理是 JS 中非常糟糕的部分之一1,但这种移位相对简单。我们只是根据列表中第一个日期和当前日期之间的差异计算新的时间戳,并将该差异添加到我们的新开始时间,然后从该时间戳创建一个日期:
const shiftEvents = (start, events) =>
events .map (e => new Date (e - events[0] + start .getTime ()))
const events = [new Date ('2022-03-09T22:51:03.507'), new Date ('2022-03-09T22:51:05.492'), new Date ('2022-03-09T22:51:10.604'), new Date ('2022-03-09T22:51:13.551')]
console .log (shiftEvents (new Date ('2022-03-16T22:59:18.219'), events))
1 Temporal 提案中有更好的东西即将出现。
我有一个这样创建的时间对象数组:
let event = new Date()
这些事件是超时创建的,例如:
- 创建第一个事件*
- 2 秒后创建了另一个事件
- 5 秒后另一个事件
- 3 秒后创建另一个等...
所以每个时间对象都有对应的创建时间。
明显是过去发生的事件,还有第一个事件。
它们都存储在一个数组中,例如:[event1, event2, event3...]
事件是函数 new Date()
returns.
我怎样才能移动所有这些事件,以便它们在未来开始?
未来我的意思是,例如每当执行事件、点击等...
我怎样才能将他们的时间平均转移到所有事件都按相同的顺序进行,但从未来开始。
就像录音一样,正在回放
谢谢
var events = [...];
var firstEvent = events[0];
var now = new Date();
var oldestEventAge = now.getTime() - firstEvent.getTime();
var hour = 1000 * 60 * 60;
for (let e of events) {
e.setTime(e.getTime() + oldestEventAge + hour);
}
在这里我们得到第一个事件并计算从现在到它之间发生了多少毫秒。即它多大了。
那我们定义1小时为毫秒。这就是我们将第一个事件推向未来的程度。
然后对于每个事件,我们将其当前时间(以毫秒为单位)加上最早事件的时间加上一小时。
这将导致最早的事件在未来 1 小时发生,所有后续事件与最早事件的距离相同,也在未来。
显然将 hour
的值更改为您希望第一个事件在未来发生的时间。
虽然日期处理是 JS 中非常糟糕的部分之一1,但这种移位相对简单。我们只是根据列表中第一个日期和当前日期之间的差异计算新的时间戳,并将该差异添加到我们的新开始时间,然后从该时间戳创建一个日期:
const shiftEvents = (start, events) =>
events .map (e => new Date (e - events[0] + start .getTime ()))
const events = [new Date ('2022-03-09T22:51:03.507'), new Date ('2022-03-09T22:51:05.492'), new Date ('2022-03-09T22:51:10.604'), new Date ('2022-03-09T22:51:13.551')]
console .log (shiftEvents (new Date ('2022-03-16T22:59:18.219'), events))
1 Temporal 提案中有更好的东西即将出现。