以秒为单位获取当前日期/时间

IT技术 javascript datetime
2021-03-07 04:31:25

如何在 Javascript 中以秒为单位获取当前日期/时间?

6个回答
var seconds = new Date().getTime() / 1000;

....会给你自 1970 年 1 月 1 日午夜以来的秒数

参考

@Nick - 我认为所有的例子都必然是推测性的,听起来是人为的 - 但我会试一试:) 假设你有用 unix 时间标记的数据,并且想要确定它的年龄。更多但我认为这最有可能是“以秒为单位的当前日期/时间”的含义;只是我的直觉。
2021-04-21 04:31:25
虽然这是准确的,但它什么时候有用?:)
2021-04-24 04:31:25
我需要的一个应用程序是使用 PHP 后端,因为 time() 函数已经返回了它。它对于时间戳也非常有用,因为您可以轻松地将 time() 作为我们的当前时间与存储在数据库中的前一时间的时间戳(例如用户何时发布某些内容)区分开来。如果您想获得像“2015 年 10 月 22 日”这样的格式化时间,您可以制作自己的函数,将时间戳作为参数返回,或者使用 Stack 中已有的函数。无论如何,希望这能让您了解什么时候会有用。@尼克克雷弗
2021-05-03 04:31:25
值得注意的是,你想把它包装在 Math.floor() 中,否则你会得到一个小数。
2021-05-06 04:31:25
一种有用的方法是计算两次之间经过的时间。
2021-05-11 04:31:25
 Date.now()

给出自纪元以来的毫秒数。无需使用new.

在此处查看参考:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now

(在 IE8 中不支持。)

Date.now() / 1000 回答问题本身
2021-04-24 04:31:25
这个毫秒的答案甚至没有回答被问到的问题。“如何以秒为单位获取当前日期/时间”
2021-05-08 04:31:25
@magician11 -Date.now() / 1000也没有回答这个问题,因为它给出了以毫秒为单位的部分分数的值
2021-05-09 04:31:25

Usingnew Date().getTime() / 1000是获取秒数的不完整解决方案,因为它生成带有浮点单位的时间戳。

new Date() / 1000; // 1405792936.933

// Technically, .933 would be in milliseconds

而是使用:

Math.round(Date.now() / 1000); // 1405792937

// Or
Math.floor(Date.now() / 1000); // 1405792936

// Or
Math.ceil(Date.now() / 1000); // 1405792937

// Note: In general, I recommend `Math.round()`,
//   but there are use cases where
//   `Math.floor()` and `Math.ceil()`
//   might be better suited.

此外,不带浮点数的值对于条件语句更安全,因为使用浮点数获得的粒度可能会导致不需要的结果。例如:

if (1405792936.993 < 1405792937) // true

警告:按位运算符在用于操作时间戳时可能会导致问题。例如,(new Date() / 1000) | 0也可用于将值“地板”为秒,但是该代码会导致以下问题:

  1. 默认情况下,Javascript 数字是类型 64 位(双精度)浮点数,按位运算符隐式地将该类型转换为有符号的 32 位整数。可以说,类型不应该被编译器隐式转换,而开发人员应该在需要的地方进行转换。
  2. 由按位运算符生成的有符号 32 位整数时间戳会导致2038 年问题,如注释中所述。
@AndreFigueiredo - 感谢您提供这些示例。我提供的解决方案是针对“如何在 Javascript 中以秒为单位获取当前日期/时间?”的问题,因此您以小时为单位的示例不在上下文中,但我确实认为您的以秒为单位的示例具有一定的有效性。总的来说,我仍然认为Math.round()是最好的。但是,是的,我同意有使用情况下,它不是最好的,Math.floor()而且Math.ceil()是比较合适的。我已经更新了我的答案以注意相同的问题。
2021-04-17 04:31:25
为什么Math.round而不是Math.floor/ Math.trunc
2021-04-26 04:31:25
请注意,使用按位运算符进行取整将导致值转换为有符号的 32 位整数。请参阅2038 年问题
2021-04-30 04:31:25
完全同意👍 使用 Math.round(new Date() / 1000)
2021-05-05 04:31:25
@Ryan - 谢谢我更新了我的答案以阻止使用 | 0
2021-05-15 04:31:25

根据您的评论,我认为您正在寻找这样的东西:

var timeout = new Date().getTime() + 15*60*1000; //add 15 minutes;

然后在您的支票中,您正在检查:

if(new Date().getTime() > timeout) {
  alert("Session has expired");
}

要从 Javascript 纪元中获取秒数,请使用:

date = new Date();
milliseconds = date.getTime();
seconds = milliseconds / 1000;