编程(Programming)是编定程序的中文简称,就是让计算机代码解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程。为了使计算机能够理解(understand)人的意图,人类就必须将需解决的问题的思路、方法和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算体系之间交流的过程就是编程。 【实例名称】 JS代码实现全球的时间查看表 【实例描述】 在宾馆的大堂经常看到全球各地的一些时间,这也可用在宾馆或航空部门的网页上,用户可通过选择时区来查看不同地方的时间。 【实例代码】 <html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>标题页-本站(www.xue51.com)</title>
</head>
<body bgcolor="#cccccc" OnLoad="getTime(timezone, 0)">
<script language="JavaScript">
var timerRunning = false;
var timezone = "格林尼治标准时间";
var adjust = 0;
function getTime(tzone, diff)
//获取指定时区的时间
{
if (timerRunning) {
clearTimeout(updatetime);
timerRunning = false;
}
gmtOffset=eval(diff+adjust);
//此处设置时区差别
timezone = tzone;
checkDateTime();
}
function checkDateTime () {
var today = new Date();
//获取当前时间
var year = today.getYear() + 00;
//获取年
var month = today.getMonth()+1;
//获取月
var date = today.getDate();
//获取日期
var day = today.getDay();
//获取日
var hour = today.getHours();
//获取小时
var minute = today.getMinutes();
//获取分
var second = today.getSeconds();
//获取秒 var lastSat = date - (day+1);
while (lastSat < 32) lastSat+=7;
if (lastSat > 31) lastSat+=-7;
var firstSat = date - (day+1);
while (firstSat > 0) firstSat+=-7;
if (firstSat < 1) firstSat+=7;
if ((((month == 4) && (date >= firstSat)) || month > 4) &&
(month < 11 || ((month == 10) && day <= lastSat)))
adjust += 60;
yourOffset = (new Date()).getTimezoneOffset();
//当前计算机上的时间和UTC 之间相差的分钟数
yourOffset = yourOffset + adjust; if ((((month == 4) && (date > 20)) || month > 4) &&
(month < 11 || ((month == 10) &&
day < 30))) adjust -= 60; ourDifference = eval(gmtOffset - yourOffset);
//根据本地时间和前面获取的与utc之间的差别
var half = eval(ourDifference % 60);
//取60的余,剩下的是分钟数
ourDifference = Math.round(ourDifference / 60);
//获取间隔的小时数
hour = eval(hour - ourDifference);
//用本地小时-间隔的小时
var m = new Array("",
"1","2","3",
"4","5","6",
"7","8","9",
"10","11","12");
//月份数组
var leap = eval(year % 4);
//判断闰年的变量(不太精确) if ((half == -30) || (half == 30)) minute += 30;
if (minute > 59) minute -= 60, hour++;
//当超过60分钟时,小时数增加
if (minute < 0) minute += 60, hour--;
//当小于60分钟时,小时数减少
if (hour > 23) hour -= 24, date += 1;
//当超过24小时时,天数加1
if (((month == 4) || (month == 6) ||
(month == 9) || (month == 11)) && (date==31)) date = 1, month ++;
//指定的月为30天,超过30,则月份加1
if (((month == 2) && (date > 28)) && (leap != 0)) date = 1, month ++;
//2月份比较特殊
if ((month == 2) && (date > 29)) date = 1, month++;
//非闰年时候的2月份
if (hour < 0) hour += 24, date --;
//如果小时数小于0,则天数减1
if ((date == 32) && (month == 12)) month = m[1], date = 1, year++;
//当超过一年时
if (date == 32) date = 1, month++;
//当超过一月时
if ((date < 1) && (month == 1)) month= m[12], date = 31, year--;
//当前月份为1月份时,如果天数小于1,则转到12月份
if (date < 1) date = 31, month --;
//日子小于1时,月份减1
if (((month == 4) || (month == 6) ||
//一月30天的设置
(month== 9) || (month == 11)) && (date == 31)) date = 30;
if ((month == 2) && (date > 28)) date = 29;
//2月份的设置
if (((month == 2) && (date > 28)) && (leap != 0)) date=28;
for (i=1; i<13; i++) {
if (month == i) {
month = m[i];
break;
}
} var dateTime = hour;
dateTime = ((dateTime < 10) ? "0":"") + dateTime;
//显示两位数的时间
dateTime = " " + dateTime;
dateTime += ((minute < 10) ? ":0" : ":") + minute;
//显示两位数的分钟
dateTime += ((second < 10) ? ":0" : ":") + second;
//显示两位数的秒
dateTime += (hour >= 12) ? "下午, " : "上午, ";
//显示汉字:上午和下午
dateTime += year + "年" + month + "月" + date + "日" ;
//显示年月日 document.clock.zonetime.value = dateTime;
//显示所选时区的时间
document.clock.zonename.value = timezone;
//显示选择的时区
updatetime=setTimeout("checkDateTime()", 1000);
//定时更新时间-每隔1秒
timerRunning = true;
}
</script>
<br>
<form name=clock>
<input type=text name=zonetime size=28>
<br>
<br>
<b>当前选择的地区</b><br>
<input type=text name=zonename size=21>
<br>
<br>
<table border=1 cellpadding=5>
<tr>
<td align=center>
<input type=button value="太平洋"
onClick="getTime(this.value, +480)" name="button">
</td>
<td align=center>
<input type=button value="中心"
onClick="getTime(this.value, +420)" name="button">
</td>
<td align=center>
<input type=button value="东方"
onClick="getTime(this.value, +300)" name="button">
</td>
</tr>
<tr>
<td align=center>
<input type=button value="夏威夷" onClick="
getTime(this.value, +600)" name="button">
</td>
<td align=center>
<input type=button value="墨西哥"
onClick="getTime(this.value, +360)" name="button">
</td>
<td align=center>
<input type=button value="新德里"
onClick="getTime(this.value, -330)" name="button">
</td>
</tr>
<tr>
<td align=center>
<input type=button value="北京"
onClick="getTime(this.value, -420)" name="button">
</td>
<td align=center>
<input type=button value="东京"
onClick="getTime(this.value, -540)" name="button">
</td>
<td align=center>
<input type=button value="伦敦"
onClick="getTime(this.value, +0)" name="button">
</td>
</tr>
</table>
</form>
</body>
</html>
【运行效果】
【难点剖析】 本例的重点有两个:格林尼治时间的定义,以及当地时间与标准时间之间的时间差。全球被划分为24个时区,以通过英国格林尼治天文台的本初子午线为标准,其东西经度7.5度的范围为零时区,每个时区中央经线上的时间就是各时区的标准时间。“getTimezoneOffset”方法用来获取当地时间与UTC(标准时间)之间的时间差。因为此方法返回的是分钟数,所以可以通过“/60”的方式获取小时数,然后通过“%60”的方式获取剩余的分钟数。 【源码下载】 为了JS代码的准确性,请点击:全球的时间查看表 进行本实例源码下载
使用编程语言写的程序,由于每条指令都对应计算机一个特定的基本动作,所以程序占用内存少、执行效率高。 |