就像标题所说,我需要获得两个日期之间的差异,并显示倒计时至完成日期的小时,分钟,秒。我有这个:
function timer(){
'use strict'
var date1 = new Date().getTime();
var date2 = new Date("05/29/2017").getTime();
var diff = date2 - date1;
var seconds = diff / 1000;
var minutes = (diff / 1000) / 60;
var hours = minutes / 60;
var message = 'Hours: ' + Math.floor(hours) + " Minutes: " + Math.floor(minutes) + " Seconds: " + Math.floor(seconds);
var output = document.getElementById('output');
if (output.textContent !== undefined) {
output.textContent = message;
} else {
output.innerText = message;
}
}
setInterval("timer()", 1000);
window.onload = timer;

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>hi</title>
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link rel="stylesheet" href="css/form.css">
</head>
<body>
<!-- auction.html -->
<form action="#" method="post" id="theForm">
<fieldset><legend>Auction ends on May 29, 2017</legend>
<p>Refresh page for updated times.</p>
<div id="output"></div>
<input type="submit" value="Refresh" id="submit">
</fieldset>
</form>
<script src="js/auction.js"></script>
</body>
</html>
&#13;
我的作业说明指出我需要:&#34;选择将来的结束日期(作业到期后几周)并使用UTC。显示拍卖结束前的小时,分钟和秒数。&#34; 我有点迷失在如何实施UTC并创建一个正确的倒计时?我甚至不确定我是否做得对(我刚开始学习j.s)。我该如何修复我的代码?
答案 0 :(得分:11)
在您的代码中,您有:
var date1 = new Date().getTime();
在这种情况下,不需要使用 getTime 。但是使用有意义的变量名是有帮助的:
var now = new Date();
然后有:
var date2 = new Date("05/29/2017").getTime();
不要使用Date构造函数(或Date.parse)来解析字符串,因为它主要依赖于实现并且不一致。如果您有特定日期,请将值直接传递给构造函数。
关于&#34; 使用UTC &#34;,因为ECMAScript Date对象是UTC,所以有点令人困惑。它们使用主机时区偏移量来计算内部UTC时间值,并显示&#34; local&#34;日期和时间值。我能解释的唯一方法是使用UTC&#34;是使用Date.UTC创建日期实例,例如:
var endDate = new Date(Date.UTC(2017,4,29)); // 2017-05-29T00:00:00Z
现在你可以在现在使用:
之间找到区别var diff = endDate - now;
当你想要获得时间,分钟和秒时:
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;
将所有内容放在一个函数中:
function timeLeft() {
var now = new Date();
var endDate = new Date(Date.UTC(2017,4,29)); // 2017-05-29T00:00:00Z
var diff = endDate - now;
var hours = Math.floor(diff / 3.6e6);
var minutes = Math.floor((diff % 3.6e6) / 6e4);
var seconds = Math.floor((diff % 6e4) / 1000);
console.log('Time remaining to ' + endDate.toISOString() +
' or\n' + endDate.toString() + ' local is\n' +
hours + ' hours, ' + minutes + ' minutes and ' +
seconds + ' seconds');
}
timeLeft()
&#13;
这里有许多关于计时器和日期差异的问题和答案,做一些搜索。
答案 1 :(得分:2)
您应该在{javascript
中使用momentjs进行任何日期时间操作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"