2007-11-06 Debug



今天一整天都在debug的說.嗄?這麼快就有工作了喔?嗯~其實並不是,今天解的bug是網頁右下的時鐘XD

話說上週日光節約時間(DST)結束,但是NY的時間卻沒有自動減一小時.查了一下程式碼發現,原因是因為以前電腦設定的時區是NY,該區有DST,線在回到台灣後,電腦的時區變成Taipei,而台北並沒有實行DST,所以程式會判斷錯誤.變成在美國那邊的用戶看到的時間是對的,但是台灣地區用戶看到的時間卻是錯的.

小宗宗查了很久發現竟然flash的actionscript沒有任何的函式可以直接判斷現在是否是DST時間,只好改用傳統的方法,抓現在時間與DST開始和結束時間做比對來決定是否要啟動DST.

由於公司電腦沒有裝flash,所以小宗宗完全是靠線上語法字典寫出雛型的,回到家後再經過大約兩小時的修正與測試才完成.嗯~今天一整個很充實XD

06.jpg

核心程式碼如下:


//取得日期時間函數
function get_time(differHours, DSTzone, Beep) {
//預設DST時間為0
DSTHours = 0;
//取得現在時間
now = new Date();
//取得顯示時區的時間
Localnow = new Date();
Localnow.setTime(now.getTime()+1000*60*60*differHours+now.getTimezoneOffset()*60*1000);
delete now;
//如果該時區有DST
if (DSTzone == 1) {
//取得3/1的日期
DSTstart = new Date(Localnow.getFullYear(), 2, 1);
//如果第一天是週日則DST開始日期是8號,否則是15-DSTstart.getUTCDay()
DSTstart_Date = (DSTStart.getDay() == 0) ? 8 : 15-DSTstart.getDay();
//十一月和三月日期分布相同,因此直接減7可得DST結束日期
DSTend_Date = DSTstart_Date-7;
delete DSTstart;
//設定DST起始/結束時間
DSTstart = new Date(Localnow.getFullYear(), 2, DSTstart_Date, 2, 0, 0, 0);
DSTend = new Date(Localnow.getFullYear(), 10, DSTend_Date, 1, 0, 0, 0);
//檢查現在是否是日光節約時間
if ((Localnow.getTime()>=DSTstart.getTime()) && (Localnow.getTime()23) ? Hours-24 : Hours;
//補零
Hours = (Hours<=9) ? "0"+Hours : Hours; Minutes = (Minutes<=9) ? "0"+Minutes : Minutes; //輸出 return Hours.toString()+"<"+Minutes.toString(); }