为日期添加 10 秒

IT技术 javascript
2021-02-03 06:16:17

如何向 JavaScript 日期对象添加 10 秒?

像这样的东西:

var timeObject = new Date()     
var seconds = timeObject.getSeconds() + 10;
timeObject = timeObject + seconds;
6个回答

还有一个setSeconds方法:

var t = new Date();
t.setSeconds(t.getSeconds() + 10);

有关其他 Date功能的列表您应该查看 MDN


setSeconds 将正确处理环绕情况:

var d;
d = new Date('2014-01-01 10:11:55');
alert(d.getMinutes() + ':' + d.getSeconds()); //11:55
d.setSeconds(d.getSeconds() + 10);
alert(d.getMinutes() + ':0' + d.getSeconds()); //12:05

请注意,我的 Nodejs 安装将 d.getSeconds() 作为字符串返回。我不得不将其更改为 (+d.getSeconds()) 一元加号将字符串转换为数字。也许更明显的是 1*d.getSeconds()
2021-03-16 06:16:17
依赖未记录的行为(setSeconds(70) 会将分钟增加一并将秒设置为 10)似乎是一种普遍的错误做法。指向 Date.getTime() + <number of milliseconds to add> 的(当前下一个)答案似乎是预期和支持的方法,并且对于来自不同语言的大多数程序员来说很清楚,而没有对每个未记录的细微差别的百科全书知识特定的 JavaScript 引擎。
2021-03-26 06:16:17
@tqwhite,在节点中typeof new Date().getSeconds()返回'number',所以我认为您可能有其他问题(除非您使用的是过时版本的节点或其他东西)。
2021-04-01 06:16:17
尝试这样做d.setSeconds(d.getSeconds() - 92);,您最终会得到 2'32" 的差异而不是 1'32"。new Date(d.getTime() - 92*1000);然而,解决方案有效!
2021-04-05 06:16:17
历史时区可能会出现问题,请参阅@Ron 答案下方的评论:stackoverflow.com/a/17267937/198797可能不是一个常见的场景,但仍然是一个问题。
2021-04-07 06:16:17
// let timeObject = new Date();
// let milliseconds= 10 * 1000; // 10 seconds = 10000 milliseconds
timeObject = new Date(timeObject.getTime() + milliseconds);
并且需要 timeObject 之前的 + 因为它将 timeObject 转换为一个数字。所以它就像 Ron 的答案中的 timeObject.getTime()
2021-03-21 06:16:17
...而您添加 10000 的原因是因为 Javascript 日期以毫秒为单位工作,即 10000 = 10 * 1000
2021-03-25 06:16:17

只是为了我们中间的表演狂。

获取时间

var d = new Date('2014-01-01 10:11:55');
d = new Date(d.getTime() + 10000);

5,196,949 次操作/秒,最快


设置秒数

var d = new Date('2014-01-01 10:11:55');
d.setSeconds(d.getSeconds() + 10);

2,936,604 次操作/秒,慢 43%


时刻.js

var d = new moment('2014-01-01 10:11:55');
d = d.add(10, 'seconds');

22,549 次操作/秒,慢 100%


所以也许它是人类最不可读的(不是那么糟糕),但它是最快的方式:)

jspref 在线测试

超级有用,谢谢详细解答!
2021-03-15 06:16:17
感谢您提供详细信息,非常有用:)
2021-03-30 06:16:17
const timeObject = new Date(); 
timeObject = new Date(timeObject.getTime() + 1000 * 10);
console.log(timeObject);

另请参阅: 如何向 JavaScript 日期对象添加 30 分钟?

在所有错误的答案中,这是正确的。
2021-03-17 06:16:17
是的,这是正确的答案。不幸的是,如果搜索“javascript date add seconds”并且投票最多的答案是错误的,那么谷歌指的是这个问题。
2021-03-17 06:16:17
@tsemer,乍一看,我认为 zzzzBov 的答案不对,因为我认为如果超出范围,它不会更新分钟值。但是因为你的“挑战”,我查看了 MDN,并确认答案绝对正确。:)
2021-03-17 06:16:17
有人可以解释一下所选答案(目前来自@zzzzBov)做错了什么吗?这个对我有用。
2021-03-26 06:16:17
@tsemer 在支持历史时区的 Web 浏览器中尝试(例如 Internet Explorer 11):还将您的系统时区设置为“亚洲/叶卡捷琳堡”: var timestamp = Date.parse("2011-03-26T20:59:59.999Z"); var d = new Date(timestamp); d.setSeconds(d.getSeconds() + 10); console.log(d.getTime() - timestamp);
2021-04-14 06:16:17

试试这个

a = new Date();
a.setSeconds(a.getSeconds() + 10);