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

Posted

技术标签:

【中文标题】如何计算两个日期之间的秒数?【英文标题】:How do I calculate how many seconds between two dates? 【发布时间】:2011-01-02 17:03:38 【问题描述】:

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

我怎样才能知道它们之间有多少秒?

【问题讨论】:

我尽量在约会之间留出至少半小时,以免被抓到。 yyyy-MM-dd 是明确的(年、月、日——注意它们不是全部大写),但 ZZZZ-NN-EE 不是这样。我将其解释为(时区,???,星期几)。是一年中的一周吗?如果是这样,那将是ww。但是我们仍然需要年份来计算差异。你能给出一些实际的样本值吗? @BalusC:我相信他只是去了下一个字母来表示第二个日期(Y -> Z、M -> N 和 D -> E)。使用诸如 startDate 和 endDate 之类的变量名可能会更好。 啊,我明白了。这确实可以问得更清楚。 【参考方案1】:

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

javascript Date Object Reference

【讨论】:

getSeconds() -> 返回秒数。 (范围是 0-59)。应该是 valueOf() 或 getTime()【参考方案2】:

我用 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 site 是供将来参考的方便来源

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

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

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

【讨论】:

只有示例中使用的模式是不正确的。 4 位数年份用小写 yyyy 表示,2 位数月份用大写 MM 表示,2 位数天用小写 dd 表示。 Martin,我的印象是这里没有使用任何日期模式。 MM DD、YYYY 和 NN EE、ZZZZ 实际上是 Steven 询问的“示例值”。所以换句话说,他没有做任何格式化。 我已经更新了第二个例子,我猜每个人都对此感到困惑。我还对我如何解释他的示例中给出的值进行了一些澄清。 你的第二个变量需要被称为t2 在大多数情况下,您可能会做 t2 - t1,而不是 t1 - t2【参考方案3】:

只需减去:

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");

【讨论】:

@user3344977 - 然后发生了一些有趣的事情!检查ab 的值并确保它们是日期。 @Seth 你是对的,所以我删除了我的评论。我的一个“日期”实际上是一个字符串。这非常有效。 您的答案(仅使用new Date() - new Date())和@Martin 的答案(使用new Date().getTime() - new Date().getTime())有什么区别? 从上一条评论中回答我自己的问题:TypeScript 不喜欢相互减去日期对象,从而给出此错误:The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.。然而,@Martin 的答案在 TypeScript 中有效。 我支持使用 getTime() - new Date() 对数字的隐式强制可能是按照惯例而不是按照规范。我没有看到spec 中定义的操作员行为。对我来说,这表明该行为是基于强制规则的隐含行为。我认为明确(首先转换为毫秒,这样你就知道你正在减去毫秒)更清楚。如果非 Date 对象意外发送到您的函数中,它还会立即捕获 @user3344977 提到的错误。【参考方案4】:
var a = new Date("2010 jan 10"),
    b = new Date("2010 jan 9");

alert(
    a + "\n" + 
    b + "\n" +
    "Difference: " + ((+a - +b) / 1000)
);

【讨论】:

【参考方案5】:

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

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

【讨论】:

+1 提到闰秒问题!当这件事处理不当时,即使是那些应该更了解的人(POSIX 委员会,我在看着你……) 值得一提的是,ECMA 标准明确忽略闰秒(即:甚至 过去 闰秒):In time values leap seconds are ignored. It is assumed that there are exactly 86,400,000 milliseconds per day.【参考方案6】:

.Net 提供 TimeSpan 类来为您计算。

var time1 = new Date(YYYY, MM, DD, 0, 0, 0, 0)
var time2 = new Date(ZZZZ, NN, EE, 0, 0, 0, 0)

Dim ts As TimeSpan = time2.Subtract(time1)

ts.TotalSeconds

【讨论】:

@Jeff,您可能想删除此答案,以免失分。他们要求提供 JavaScript 源代码,而不是 Visual Basic 源代码。【参考方案7】:

在 bash 中:

bc <<< "$(date --date='1 week ago' +%s) - \
    $(date --date='Sun,  29 Feb 2004 16:21:42 -0800' +%s)"

它确实需要安装 bc 和 gnu date。

【讨论】:

这有什么关系?【参考方案8】:

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

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

【讨论】:

【参考方案9】:

简单的方法:

function diff_hours(dt2, dt1) 
 

  var diff =(dt2.getTime() - dt1.getTime()) / 1000;
  diff /= (60 * 60);
  return Math.abs(Math.round(diff));

 


function diff_minutes(dt2, dt1) 
 

  var diff =(dt2.getTime() - dt1.getTime()) / 1000;
  diff /= (60);
  return Math.abs(Math.round(diff));

 

function diff_seconds(dt2, dt1) 
 

  var diff =(dt2.getTime() - dt1.getTime()) / 1000;
  return Math.abs(Math.round(diff));

 

function diff_miliseconds(dt2, dt1) 
 

  var diff =(dt2.getTime() - dt1.getTime());
  return Math.abs(Math.round(diff));

 


dt1 = new Date(2014,10,2);
dt2 = new Date(2014,10,3);
console.log(diff_hours(dt1, dt2));


dt1 = new Date("October 13, 2014 08:11:00");
dt2 = new Date("October 14, 2014 11:13:00");
console.log(diff_hours(dt1, dt2));

console.log(diff_minutes(dt1, dt2));

console.log(diff_seconds(dt1, dt2));

console.log(diff_miliseconds(dt1, dt2));

【讨论】:

以上是关于如何计算两个日期之间的秒数?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中确定两个日期之间的秒数

两个日期之间按小时分组的秒数

iOS开发:计算两个事件之间经过的秒数的简单方法是啥?

C/C++输入两个任意日期求相隔天数

MySQL计算两个日期相差的天数月数年数

java 中怎么比较两个时间相差的秒数