如何计算两个日期之间的秒数?

IT技术 javascript date time
2021-02-06 19:43:24

所以我有两个日期YYYY-MM-DDZZZZ-NN-EE

我怎样才能找出它们之间有多少秒?

6个回答

我用 YYYY & ZZZZ 表示整数值,表示年份,MM & NN 表示整数值,表示一年中的月份,而 DD & EE 表示整数值,表示月份中的某一天。

var t1 = new Date(YYYY, MM, DD, 0, 0, 0, 0);
var t2 = new Date(ZZZZ, NN, EE, 0, 0, 0, 0);
var dif = t1.getTime() - t2.getTime();

var Seconds_from_T1_to_T2 = dif / 1000;
var Seconds_Between_Dates = Math.abs(Seconds_from_T1_to_T2);

一个方便的供将来参考的来源是MDN 站点

或者,如果您的日期采用 javascript 可以解析的格式

var dif = Date.parse(MM + " " + DD + ", " + YYYY) - Date.parse(NN + " " + EE + ", " + ZZZZ);

然后您可以使用该值作为以毫秒为单位的差异(我的两个示例中的差异具有相同的含义)

马丁,我的印象是这里没有使用任何日期模式。MM DD、YYYY 和 NN EE、ZZZZ 实际上是 Steven 问的“示例值”。所以换句话说,他没有做任何格式化。
2021-03-20 19:43:24
需要调用您的第二个变量t2
2021-03-26 19:43:24
在大多数情况下,您可能会执行 t2 - t1,而不是 t1 - t2
2021-03-31 19:43:24
只有示例中使用的模式不正确。4 位数字的年份用小写字母表示yyyy,2 位数字的月份用大写字母表示MM,2 位数字的日期用小写字母表示dd
2021-04-04 19:43:24
我已经更新了第二个例子,我猜这是每个人都感到困惑的地方。我还对我如何解释他的示例中给出的值进行了一些澄清。
2021-04-09 19:43:24

只需减去:

var a = new Date();
alert("Wait a few seconds, then click OK");

var b = new Date();
var difference = (b - a) / 1000;

console.log("You waited: " + difference + " seconds");

从上一条评论中回答我自己的问题:TypeScript 不喜欢将日期对象相互减去,从而出现以下错误:The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.. 但是,@Martin 的回答适用于 TypeScript。
2021-03-15 19:43:24
我支持使用getTime()- 对数字的隐式强制new Date()转换可能是约定而不是规范。我没有看到规范中定义的操作员行为对我来说,这表明基于强制规则的行为是隐含的。我认为明确(首先转换为毫秒,所以你知道你正在减去毫秒)更清楚。如果非日期对象被意外发送到您的函数中,它也会立即捕获@user3344977 提到的错误。
2021-03-17 19:43:24
@Seth 你是对的,所以我删除了我的评论..我的一个“日期”实际上是一个字符串。这完美地工作。
2021-03-18 19:43:24
您的答案(仅使用new Date() - new Date())和@Martin 的答案(使用new Date().getTime() - new Date().getTime())有什么区别
2021-03-25 19:43:24
@ user3344977 - 那么有趣的事情正在发生!检查 和 的值ab确保它们是日期。
2021-03-26 19:43:24

你可以简单地做到这一点。

var secondBetweenTwoDate = Math.abs((new Date().getTime() - oldDate.getTime()) / 1000);

如果您的一个或两个日期都在未来,那么如果您想要秒的准确性,恐怕您就是 SOL。UTC 时间有闰秒,直到它们发生前大约 6 个月才知道,因此任何比这更远的日期都可能不准确几秒(实际上,因为人们不经常更新他们的机器,你可能会发现将来的任何时间都关闭了一些秒数)。

这很好地解释了设计日期/时间库的理论以及为什么会这样:http : //www.boost.org/doc/libs/1_41_0/doc/html/date_time/details.html#date_time.tradeoffs

+1 提到闰秒问题!如果处理不当,即使是那些应该更了解的人(POSIX 委员会,我在看着你……)
2021-04-09 19:43:24
值得一提的是,ECMA 标准明确忽略闰秒(即:甚至过去的闰秒):在时间值中忽略闰秒。假设每天正好有 86,400,000 毫秒
2021-04-11 19:43:24

创建两个Date对象并调用valueOf()它们,然后比较它们。

JavaScript 日期对象参考

getSeconds() -> 返回秒数。(范围是 0-59)。应该是 valueOf() 或 getTime()
2021-03-14 19:43:24