使用UTC以小时、分钟、秒为单位获取Javascript中两个日期之间的差异

使用UTC以小时、分钟、秒为单位获取Javascript中两个日期之间的差异,javascript,date,countdown,Javascript,Date,Countdown,正如标题所说,我需要得到两个日期之间的差异,并显示从计时到完成日期的小时、分钟、秒数。我有这个: 函数计时器(){ “严格使用” var date1=new Date().getTime(); var date2=新日期(“2017年5月29日”).getTime(); var diff=date2-date1; var秒=diff/1000; var分钟=(差值/1000)/60; var小时=分钟/60; var消息='Hours:'+Math.floor(小时)+“分钟:”+Math.f

正如标题所说,我需要得到两个日期之间的差异,并显示从计时到完成日期的小时、分钟、秒数。我有这个:

函数计时器(){
“严格使用”
var date1=new Date().getTime();
var date2=新日期(“2017年5月29日”).getTime();
var diff=date2-date1;
var秒=diff/1000;
var分钟=(差值/1000)/60;
var小时=分钟/60;
var消息='Hours:'+Math.floor(小时)+“分钟:”+Math.floor(分钟)+“秒:”+Math.floor(秒);
var output=document.getElementById('output');
if(output.textContent!==未定义){
output.textContent=消息;
}否则{
output.innerText=消息;
}
}
设置间隔(“计时器()”,1000);
window.onload=计时器

你好
拍卖于2017年5月29日结束
刷新页面以获取更新的时间

您真的应该使用javascript进行任何日期时间操作

var now  = "04/09/2013 15:00:00";
var then = "04/09/2013 14:20:30";

moment.utc(moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"))).format("HH:mm:ss")

// outputs: "00:39:30"
在代码中,您有:

var date1 = new Date().getTime();
var seconds = diff / 1000;
var minutes = (diff / 1000) / 60;
var hours = minutes / 60;
在这种情况下,不需要使用getTime。但使用有意义的变量名很有帮助:

var now = new Date();
然后是:

var date2 = new Date("05/29/2017").getTime();
不要使用日期构造函数(或Date.parse)来解析字符串,因为它主要依赖于实现且不一致。如果您有特定的日期,请直接将值传递给构造函数

关于“使用UTC”,这有点令人困惑,因为ECMAScript日期对象是UTC。它们使用主机时区偏移量计算内部UTC时间值,并显示“本地”日期和时间值。我解释“使用UTC”的唯一方法是使用Date.UTC创建日期实例,例如:

var endDate = new Date(Date.UTC(2017,4,29)); // 2017-05-29T00:00:00Z
现在,您可以使用以下方法获得与现在的差异:

var diff = endDate - now; 
尝试获取您拥有的小时、分钟和秒数时:

var date1 = new Date().getTime();
var seconds = diff / 1000;
var minutes = (diff / 1000) / 60;
var hours = minutes / 60;
这将整个时间差转换为小时、分钟和秒,因此总时间大约是其应有时间的3倍。您需要的只是组件,因此:

var hours = Math.floor(diff / 3.6e5);
var minutes = Math.floor(diff % 3.6e5) / 6e4);
var seconds = Math.floor(diff % 6e4) / 1000;
将所有功能放在一个功能中:

函数timeLeft(){
var now=新日期();
var endDate=新日期(日期:UTC(2017,4,29));//2017-05-29T00:00:00Z
var diff=结束日期-现在;
var小时=数学地板(差异/3.6e6);
风险值分钟数=数学下限((差异%3.6e6)/6e4);
var秒数=数学下限((差异%6e4)/1000);
console.log('到'+endDate.toISOString()的剩余时间+
'或\n'+endDate.toString()+'本地是\n'+
小时数+小时数+分钟数+分钟数
秒+‘秒’;
}

timeLeft()
(a)查看
Date.UTC
函数。(b) 问问自己,你的秒、分、时计算是否合理。一、 作为一个用户,不会期望输出“3小时等于180分钟等于10800秒”(这没有给我任何有价值的信息),而是一个累积输出,例如“1小时50分钟20秒”。在这种情况下,您需要重新考虑您的计算。这实际上是or的副本。唯一的区别是将差异分解为时间而不是天数。OP的任务不是如何使用moment.js,而是如何计算两个日期之间的差异。