我怎样才能在Javascript中获得自纪元以来的秒数?

Ali*_*ice 130 javascript datetime

在Unix上,我可以运行date '+%s'以获得自纪元以来的秒数.但我需要在浏览器前端查询,而不是后端.

有没有办法在JavaScript中查找自Epoch以来的秒数?

DVK*_*DVK 222

var seconds = new Date() / 1000;
Run Code Online (Sandbox Code Playgroud)

或者,对于一个不那么hacky版本:

var d = new Date();
var seconds = d.getTime() / 1000;
Run Code Online (Sandbox Code Playgroud)

不要忘记Math.floor()Math.round()舍入到最接近的整数,否则你可能得到一个你不想要的非常奇怪的小数:

var d = new Date();
var seconds = Math.round(d.getTime() / 1000);
Run Code Online (Sandbox Code Playgroud)

  • 回复:神秘的魔法:根据[这些文档](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number#Using_Number_to_convert_a_Date_object),Javascript知道如何将 Date 对象转换为 Date 对象数字。这意味着您可以键入“Number(new Date())”来获取数字,甚至可以键入“+(new Date())”,或者在数字上下文中使用任何 Date 实例,例如“new Date()/1000” ` 并且 Javascript 会帮助将该 Date 实例转换为数字以处理您的数学方程。 (7认同)
  • `var seconds = new Date()/ 1000;`<-这是什么奥术呢? (5认同)
  • TypeScript 不接受 `new Date() / 1000;` 但 `new Date().getTime() / 1000` 效果很好 (2认同)

Tom*_*icz 56

试试这个:

new Date().getTime() / 1000
Run Code Online (Sandbox Code Playgroud)

您可能希望使用Math.floor()Math.round()减少毫秒分数.

  • ......我认为即使是`new Date()/ 1000`也应该有效. (8认同)

use*_*521 38

你想要自纪元以来的秒数

function seconds_since_epoch(){ return Math.floor( Date.now() / 1000 ) }
Run Code Online (Sandbox Code Playgroud)

示例使用

foo = seconds_since_epoch();
Run Code Online (Sandbox Code Playgroud)

  • 这应该是答案,因为它考虑了小数. (3认同)

dot*_*tgc 10

以上解决方案使用实例属性.另一种方法是使用class属性Date.now:

var time_in_millis = Date.now();
var time_in_seconds = time_in_millis / 1000;
Run Code Online (Sandbox Code Playgroud)

如果你想time_in_seconds是一个整数,你有2个选项:

一个.如果要与C样式截断一致:

time_in_seconds_int = time_in_seconds >= 0 ?
                      Math.floor(time_in_seconds) : Math.ceil(time_in_seconds);
Run Code Online (Sandbox Code Playgroud)

湾 如果你想要保持整数除法的数学定义,请发言.(Python的整数除法就是这样).

time_in_seconds_int = Math.floor(time_in_seconds);
Run Code Online (Sandbox Code Playgroud)


Rya*_*ger 8

如果您只需要秒数作为整数而不包含代表毫秒的小数,请使用:

var seconds = Math.floor(new Date() / 1000);
Run Code Online (Sandbox Code Playgroud)


jfr*_*d00 5

您可以创建一个Date对象(其中包含当前时间),然后调用getTime()以获取自纪元以来的ms.

var ms = new Date().getTime();
Run Code Online (Sandbox Code Playgroud)

如果你想要秒,那么除以1000:

var sec = new Date().getTime() / 1000;
Run Code Online (Sandbox Code Playgroud)