使用 UTC 获取 Javascript 中 2 个日期之间的时、分、秒差值
Getting the difference between 2 dates in Javascript in hours, minutes, seconds with UTC
如标题所说,我需要获取两个日期之间的差异,并显示倒计时到完成日期的小时、分钟、秒。我有这个:
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>
我的作业说明指出我需要:"Choose an end date in the future (several weeks after assignment is due) and use UTC. Display the hours, minutes, and seconds left until the auction ends."
我有点迷失了如何实施 UTC 并创建适当的倒计时?我什至不确定我是否做对了(我才刚刚开始学习 j.s)。我应该如何修复我的代码?
在 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"
在你的代码中你有:
var date1 = new Date().getTime();
在这种情况下不需要使用 getTime。但是使用有意义的变量名是有帮助的:
var now = new Date();
然后是:
var date2 = new Date("05/29/2017").getTime();
不要使用 Date 构造函数(或 Date.parse)来解析字符串,因为它主要依赖于实现且不一致。如果您有特定日期,请将值直接传递给构造函数。
关于“使用 UTC”,这有点令人困惑,因为 ECMAScript 日期对象是 UTC。他们使用主机时区偏移来计算内部 UTC 时间值,并显示 "local" 日期和时间值。我可以解释 "use UTC" 的唯一方法是使用 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()
这里有很多很多关于计时器和日期差异的问题和答案,做一些搜索。
如标题所说,我需要获取两个日期之间的差异,并显示倒计时到完成日期的小时、分钟、秒。我有这个:
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>
我的作业说明指出我需要:"Choose an end date in the future (several weeks after assignment is due) and use UTC. Display the hours, minutes, and seconds left until the auction ends." 我有点迷失了如何实施 UTC 并创建适当的倒计时?我什至不确定我是否做对了(我才刚刚开始学习 j.s)。我应该如何修复我的代码?
在 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"
在你的代码中你有:
var date1 = new Date().getTime();
在这种情况下不需要使用 getTime。但是使用有意义的变量名是有帮助的:
var now = new Date();
然后是:
var date2 = new Date("05/29/2017").getTime();
不要使用 Date 构造函数(或 Date.parse)来解析字符串,因为它主要依赖于实现且不一致。如果您有特定日期,请将值直接传递给构造函数。
关于“使用 UTC”,这有点令人困惑,因为 ECMAScript 日期对象是 UTC。他们使用主机时区偏移来计算内部 UTC 时间值,并显示 "local" 日期和时间值。我可以解释 "use UTC" 的唯一方法是使用 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()
这里有很多很多关于计时器和日期差异的问题和答案,做一些搜索。