我在页面上有两个计时器。一个显示本地时间,另一个显示从零开始的定时器。
function go()
{
startTime = Date.now();
setInterval( updateTime, 1000);
}
function updateTime() {
var now = new Date();
sessionTime = new Date(Date.now() - startTime);
$("#session").text(checkTime(sessionTime.getHours()) + ":" +
checkTime(sessionTime.getMinutes()) + ":" +
checkTime(sessionTime.getSeconds()));
$("#timer").text(checkTime(now.getHours()) + ":" +
checkTime(now.getMinutes()) + ":" +
checkTime(now.getSeconds()));
};
function checkTime(i) {
if (i <10) {
i = "0" + i;
}
return i;
}
不幸的是,元素#sessionLocale
会返回01:00:00
而不是我期待的00:00:00
。
我从'now'时间删除了startTime。然后我用它来提取小时,分钟和秒,这给了我00:00:00。但如果我使用toLocaleTimeString,我会得到01:00:00。
我想使用toLocaleTimeString来获取它的本地化选项。 有什么想法吗?
答案 0 :(得分:0)
这是有效的
function go()
{
startTime = Date.now();
setInterval( updateTime, 1000);
}
function updateTime() {
var now = new Date();
sessionTime = new Date(Date.now() - startTime);
// sessionTime.setHours(00);
console.log();
sessionTimeL = new Date(Date.now() - startTime);
$("#session").text(checkTime(sessionTime.getUTCHours()) + ":" +
checkTime(sessionTime.getUTCMinutes()) + ":" +
checkTime(sessionTime.getUTCSeconds()));
$("#sessionLocale").text(
pad(Math.floor(sessionTimeL * 1 / (1000 * 60 * 60) % 24), 2) + ':' +
pad(Math.floor(sessionTimeL * 1 / (1000 * 60) % 60), 2) + ':' +
pad(Math.floor(sessionTimeL * 1 / (1000) % 60), 2)
);
$("#timer").text(checkTime(now.getHours()) + ":" +
checkTime(now.getMinutes()) + ":" +
checkTime(now.getSeconds()));
console.log(sessionTime.toLocaleTimeString('en-US', {
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
}));
}
function checkTime(i) {
if (i <10) {
i = "0" + i;
}
return i;
}
function pad(n, width, z) {
z = z || '0';
n = n + '';
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}
go();
<!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-2.1.1.min.js"></script>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<div id="session"></div>
<div id="sessionLocale"></div>
<div id="timer"></div>
</body>
</html>
所以这就是原因。您正在创建一个新的日期,0毫秒女巫等于1970 - 01 - 01 00:00:00 UTC,所以当你在不同的时区,然后UTC你得到偏移。
您可以计算时差,也可以使用date.getUTCHours()获取UTC时数。或者你得到UTC字符串和正则表达式的时间。我所做的解决方案更安全。
答案 1 :(得分:0)
由于不同地区的偏移量变化,有时候在Javascript上使用日期会很麻烦。
有一个名为DataJS的库,它非常易于实现,具有非常出色的性能,并且可以扩展Date方法,添加您可能需要自己实现的功能。
例如,要获得两个日期之间的差异:
var futureDate = new Date().add({months: 5, days: 4, hours: 3, minutes: 2, seconds: 1});
var now = new Date();
var timeSpan = new TimeSpan(futureDate - now);
console.log("Days:", timeSpan.getDays()); console.log("Hours:", timeSpan.getHours()); console.log("Minutes:", timeSpan.getMinutes()); console.log("Seconds:", timeSpan.getSeconds());
通过这种方式,您可以在两个日期之间获得更加人性化的时间跨度。
在https://code.google.com/p/datejs/source/browse/trunk/处查看SVN中的最新版本。