Javascript 如何计算两次约会之间的间隔时间?

Javascript 如何计算两次约会之间的间隔时间?,javascript,date,time,Javascript,Date,Time,所以我有两个日期YYYY-MM-DD和ZZZZ-NN-EE 如何找出它们之间的秒数?创建两个Date对象,并对这两个对象调用valueOf(),然后比较它们 我将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

所以我有两个日期YYYY-MM-DD和
ZZZZ-NN-EE


如何找出它们之间的秒数?

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


我将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);
一个方便将来参考的来源是

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

var dif = Date.parse(MM + " " + DD + ", " + YYYY) - Date.parse(NN + " " + EE + ", " + ZZZZ);
然后您可以使用该值作为毫秒差(在我的两个示例中,dif的含义相同)

只需减去:

var a=新日期();
警报(“等待几秒钟,然后单击确定”);
var b=新日期();
风险价值差异=(b-a)/1000;

log(“您等待了:+difference+“seconds”)如果你的一个或两个约会都是在未来,那么如果你想要第二个准确度,恐怕你就太傻了。UTC时间有闰秒,在闰秒发生前大约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
在bash中:

bc <<< "$(date --date='1 week ago' +%s) - \
    $(date --date='Sun,  29 Feb 2004 16:21:42 -0800' +%s)"
bc你可以简单地做到

var secondBetweenTwoDate = Math.abs((new Date().getTime() - oldDate.getTime()) / 1000);
简易方法:

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


我尽量在两个日期之间留出至少半个小时,以防被抓到。
yyyy-MM-dd
很清楚(年、月、日-注意它们不都大写),但ZZZZ-NN-EE并非如此。我把它解释为(时区,星期中的一天)。这是一年中的一周吗?如果是这样,那就是
ww
。但我们仍然需要一年来计算差额。你能给出一些实际的样本值吗?@BalusC:我相信他只是去了下一个字母来表示第二个日期(Y->Z,M->N,D->E)。使用诸如startDate和endDate之类的变量名可能会更好。啊,我明白了。这确实可以问得更清楚。getSeconds()->返回秒数。(范围为0-59)。应该是valueOf()或getTime(),只有示例中使用的模式不正确。4位年份用小写字母表示,2位月份用大写字母表示,MM用小写字母表示,2位天数用小写字母表示。Martin,我觉得这里没有使用任何日期模式。MM DD、YYYY和NN EE、ZZZZ实际上是Steven询问的“示例值”。换句话说,他没有做任何形式的格式化工作。我已经更新了第二个例子,我想大家都不明白这一点。我还添加了一点澄清,说明我是如何解释他的示例中给出的值的。您的第二个变量需要被称为
t2
。在大多数情况下,您可能会使用t2-t1,而不是t1-t2+1来提及闰秒问题!当这件事处理不当时,令人沮丧,即使是那些本该更了解情况的人(POSIX委员会,我在看你……)值得一提的是,ECMA标准明确忽略了闰秒(即:甚至超过闰秒):。这有什么关系?@Jeff,你可能想删除这个答案,这样你就不会丢分了。他们要求的是JavaScript源代码,而不是Visual Basic源代码。@user3344977-然后发生了一些有趣的事情!检查
a
b
的值,确保它们是日期。@设置您是正确的,因此我删除了注释。。我的一个“约会”实际上是一个字符串。这很好。你的答案(只使用
new Date()-new Date()
)和@Martin的答案(使用
new Date().getTime()-new Date().getTime()
)之间有什么区别?回答我之前的问题:TypeScript不喜欢相互减去日期对象,给出此错误:
算术运算的左侧必须是“any”、“number”、“bigint”或枚举类型。
@然而,Martin的答案在TypeScript中有效。我支持使用
getTime()
——将
new Date()
隐式强制为一个数字可能是按照惯例,而不是按照规范。我看不到中定义的运算符行为。对我来说,这表明这种行为是基于强制规则的隐含行为。我认为显式(首先转换为毫秒,这样你就知道你在减去毫秒)更清晰。如果一个非日期对象被意外地发送到您的函数中,它还会立即捕获@user3344977提到的错误。
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));