给日期增加10秒


Answers:


416

还有一种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


3
当心,我的Node.js安装返回d.getSeconds()作为字符串。我必须将其更改为(+ d.getSeconds())一元加号将字符串转换为数字。也许更明显的是1 * d.getSeconds()
tqwhite

1
@tqwhite,在节点中typeof new Date().getSeconds()返回'number',所以我认为您可能还有其他问题(除非您使用的节点版本过旧)。
zzzzBov

2
尝试做d.setSeconds(d.getSeconds() - 92);,您将得到2'32“的差异,而不是1'32”。解决的办法,new Date(d.getTime() - 92*1000);但是!
拉法隆

1
依靠未记录的行为(setSeconds(70)将把分钟数增加一,并将秒数设置为10)似乎是一种通常的坏习惯。指向Date.getTime()+ <要添加的毫秒数>的(当前下一个)答案似乎是预期的和受支持的方法,并且对于大多数来自不同语言的程序员来说,如果没有百科全书了解每种方法的细微差别,这将是显而易见的。特定的JavaScript引擎。
汤姆·迪布尔

1
历史时区可能会出现问题,请参阅@Ron答案下面的注释:stackoverflow.com/a/17267937/198797。不过,这可能不是常见的情况,而是一个问题。
tsemer '18

110
// let timeObject = new Date();
// let seconds = 10 * 1000; // 10000 milliseconds
timeObject = new Date(timeObject.getTime() + seconds);

33
...并且您添加10000的原因是因为Javascript日期以毫秒为单位,即10000 = 10 * 1000
psiphi75 2014年

1
并且需要timeObject之前的+,因为它将timeObject强制转换为数字。因此,就像Ron的答案中的timeObject.getTime()一样
詹姆斯

1
JavaScript太讨厌了。这些早期的API有点搞砸了。
usr

62

仅出于我们中间的表演狂。

getTime

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

5,196,949 Ops / sec,最快


setSeconds

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

2,936,604 Ops / sec,慢43%


moment.js

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

22,549 Ops / sec,慢100%


因此,它可能是最不易读的(不是那么糟糕)但最快的方式:)

jspref在线测试


3
感谢您提供详细信息,这非常有用:)
院长

58
const timeObject = new Date(); 
timeObject = new Date(timeObject.getTime() + 1000 * 10);
console.log(timeObject);

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


7
在这里所有错误的答案中,这是正确的。
Cory Mawhorter 2014年

是的,这是正确的答案。不幸的是,如果搜索“ javascript date add seconds”并且投票最多的答案是错误的,则Google会引用此问题。
PhilippGächter2014年

2
有人可以解释所选答案(当前来自@zzzzBov)做错了什么吗?这个对我有用。
tsemer '16

1
@tsemer,乍一看,我认为zzzzBov的答案不正确,因为我不认为如果超出范围,它将不会更新分钟值。但是由于您的“挑战”,我审核了MDN,并确认答案绝对正确。:)
罗恩

1
@tsemer在具有历史性TimeZones支持的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);
还将

9

试试这个

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


4

我有几个新的变体

  1. var t = new Date(Date.now() + 10000);
  2. var t = new Date(+new Date() + 10000);

2

Date()javascript中的对象确实不是那么聪明。

如果您只专注于增加秒数,这似乎可以使事情顺利进行,但是如果您尝试将X的秒数加上X的分钟数和小时数,以此类推,则会给同一Date对象带来麻烦。因此,我只是退缩到仅使用该setSeconds()方法并将数据转换为秒(效果很好)。

如果有人能证明增加时间到全球 Date()使用所有set方法对象并最终得出正确的时间,我希望看到它,但是我感觉到一次将在给定Date()对象上使用一个set方法,并且混合它们会导致混乱。

var vTime = new Date();

var iSecondsToAdd = ( iSeconds + (iMinutes * 60) + (iHours * 3600) + (iDays * 86400) );

vTime.setSeconds(iSecondsToAdd);

以下是一些可能会有所帮助的文档


2
  1. 您可以setSeconds通过从今天开始获取秒数并在其中添加10秒来使用方法

    var today = new Date();
    today.setSeconds(today.getSeconds() + 10);
  2. 您可以将10 * 1000毫秒添加到新日期:

    var today = new Date(); 
    today = new Date(today.getTime() + 1000*10);
  3. 您可以使用setTime

    today.setTime(now.getTime() + 10000)

1

尝试这种方式。

Date.prototype.addSeconds = function(seconds) {
  var copiedDate = new Date(this.getTime());
  return new Date(copiedDate.getTime() + seconds * 1000);
}

只需致电并分配 new Date().addSeconds(10)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.