本文介绍一个基于JavaScript的倒计时程序实现。通过获取当前时间与用户输入的截止日期,计算剩余天数、小时、分钟和秒。代码特别处理了本地时间与格林威治标准时间(GMT)的分钟差,尽管作者对时区转换逻辑存在疑问,但提供了完整的HTML交互界面与JS核心逻辑,适用于基础前端时间处理场景。
JavaScript 倒计时程序实现与时间差计算解析
首先展示完整的代码实现:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> <title>countDown test</title> </head> <body> <p> <label for="deadline">截止日期</label> <input type="text" value="2011-06-11" id="deadline" /> <input type="button" value="开始倒计时" onclick="window.setInterval('countDown(\'deadline\')', 1000)" /></p> <p id="showTime"></p> </body> </html> [Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
HTML部分代码:
该界面允许用户在文本框中输入倒计时的目标时间。逻辑判断当前时间与截止时间的关系:若当前时间早于截止时间,则正常显示倒计时;若当前时间已晚于截止时间,则计算并返回距离截止日期至今的时间差。
代码如下:
<p>
<label for="deadline">截止日期</label>
<input type="text" value="2011-06-11" id="deadline" />
<input type="button" value="开始倒计时" onclick="window.setInterval('countDown(\'deadline\')', 1000)" />
</p>
<p id="showTime"></p> JavaScript部分代码:
代码如下:
function countDown(endDate) {
var now = new Date();
var deadtime = document.getElementById(endDate);
var deadline = new Date(deadtime.value);
//本地时间与格林威治标准时间 (GMT) 的分钟差
var timeDiff = now.getTimezoneOffset();
//此处有些不解,如果把分钟差转化成毫秒应该是timeDiff*60*1000,但是这样返回的数据不正确!
var leave = Math.abs(deadline.getTime() - now.getTime() + timeDiff*60);
var minute = 1000 * 60;
var hour = minute * 60;
var day = hour * 24;
var countDay = Math.floor(leave/day);
//var countHour = Math.floor((leave - day*countDay)/hour); 两种计算思路
var countHour = Math.floor(leave/hour - countDay*24);
var countMinute = Math.floor(leave/minute) - countDay*24*60 - countHour*60;
var countSecond = Math.floor(leave/1000) - countDay*24*60*60 - countHour*60*60 - countMinute*60;
var outStr = "";
if(deadline < now) {
outStr = "距离"+deadtime.value+"已有"+countDay+"天"+countHour+"小时"+countMinute+"分"+countSecond+"秒";
} else {
outStr = "距离"+deadtime.value+"还差"+countDay+"天"+countHour+"小时"+countMinute+"分"+countSecond+"秒";
}
var showTime = document.getElementById("showTime");
showTime.innerHTML = outStr;
}