如何在 JavaScript 中获取当前时间减去20秒?

23

如何在JavaScript中获取当前时间减去20秒?我无法想象如何从当前日期中减去20秒,这样做会得到一个负值。有什么更简单的方法吗?谢谢。

var currentDate = new Date()
var day = currentDate.getDate()
var month = currentDate.getMonth() + 1
var year = currentDate.getFullYear()
var ora = currentDate.getHours()
var minuti = currentDate.getMinutes()
var secondi = currentDate.getSeconds()-20

3
new Date(new Date - 20000) - Aadit M Shah
3个回答

55

试试这个:

new Date(Date.now() - 20000);

Date.now()返回自1970年1月1日00:00:00以来的毫秒数,因此我们只需从中减去20000毫秒,并使用结果创建一个新日期。

如@rjz所指出,您需要为旧版IE提供shim。以下是MDN的shim:

if (!Date.now) {
     Date.now = function() { return new Date().getTime(); }
}

1
如果您计划在IE<9中使用此功能,值得考虑使用polyfill(或替代Date.now)。 - rjz
2
new Date().valueOf() 不也返回当前时间的毫秒数吗?这应该可以消除对 polyfill 的需求。 - GJK
@GJK:是的,但我们也可以直接使用 .getTime()。更短的 Date.now() 很好,但你说得对,不是必需的。 - cookie monster
2
@GJK 没错。只需要 new Date(new Date - 20000) 就可以了。 - Aadit M Shah
@AaditMShah:啊,是的,我明白了,我错过了重点。那也是一个不错的方法。 - cookie monster
如果你计划使用IE < 9,你应该考虑辞职或撕毁你的文凭。 - Magno C

4
我会这样做:

我会这样处理:

function DateOffset( offset ) {
    return new Date( +new Date + offset );
}

var twentySecondsAgo = DateOffset( -20000 );

// Should differ by 20 seconds (modulo 60)
alert(
    twentySecondsAgo.getSeconds() +
    '\n' +
    new Date().getSeconds()
);

使用这段代码,您不需要任何补丁、兼容性插件或其他相关的东西。我刚刚在IE 5.5和Netscape 4.79中测试过,它们都可以正常工作!因此,在测试中我使用了alert()而不是console.log(),这样我就可以在那些旧浏览器中进行测试。


0

移除 getSeconds() 后面的 -20。

然后在它下面添加一行或多行代码。

secondi = secondi - 20;

1
这并不会改变任何事情。 secondi 最终的值也完全相同。 - Henry Blyth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接