編程(Programming)是編定程序的中文簡稱,就是讓計算機代碼解決某個問題,對某個計算體系規定一定的運算方式,使計算體系按照該計算方式運行,并最終得到相應結果的過程。為了使計算機能夠理解(understand)人的意圖,人類就必須將需解決的問題的思路、方法和手段通過計算機能夠理解的形式告訴計算機,使得計算機能夠根據人的指令一步一步去工作,完成某種特定的任務。這種人和計算體系之間交流的過程就是編程。 【實例名稱】 JS代碼實現全球的時間查看表 【實例描述】 在賓館的大堂經?吹饺蚋鞯氐囊恍⿻r間,這也可用在賓館或航空部門的網頁上,用戶可通過選擇時區來查看不同地方的時間。 【實例代碼】 <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度的范圍為零時區,每個時區中央經線上的時間就是各時區的標準時間!癵etTimezoneOffset”方法用來獲取當地時間與UTC(標準時間)之間的時間差。因為此方法返回的是分鐘數,所以可以通過“/60”的方式獲取小時數,然后通過“%60”的方式獲取剩余的分鐘數。 【源碼下載】 為了JS代碼的準確性,請點擊:全球的時間查看表 進行本實例源碼下載
使用編程語言寫的程序,由于每條指令都對應計算機一個特定的基本動作,所以程序占用內存少、執行效率高。 |