[問題] 時區的時間轉換

看板Flash作者 (綠草)時間10年前 (2014/02/21 21:38), 編輯推噓0(0016)
留言16則, 2人參與, 最新討論串1/1
先附上書上截取的一小段程式: setInterval(worldTime,1000);//每1秒鐘執行worldTime自訂函數1次 function worldTime(){ //使用zoneTime()自訂函數,傳遞參數台灣GMT時差+8,取得台灣目前時間 var hms = zoneTime(8); //畫面上的taipei_txt文字欄位顯示時間 taipei_txt.text = hms[0] + ":" + hms[1]+ ":" + hms[2]; } function zoneTime(GMT){ var watch= new Date(); //利用本地端小時數,及傳遞的GMT參數作不同時區加時,作為時間物件新的小時數資料 watch.setHours(watch.getHours()+ GMT); //將時間物件取得的國際標準時間時、分、秒儲存在陣列中 var hms:Array = [watch.getUTCHours(),watch.getUTCMinutes(),watch.getUTCSeconds()]; return hms; } 請問各位大大,watch.setHours(watch.getHours()+GMT);此行為何要將小時轉為毫秒 且我用trace查看setHours(watch.getHours()+ GMT),與setHours(watch.getHours() 發現值根本一樣啊...這樣GMT不就白加? 還有,國際標準時間應該是固定在跑的,為何hms陣列的內容,還會隨著watch.setHours() 在改變? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.230.28.56

02/22 18:51, , 1F
沒寫過類似的東西,不過幫你測試了一下
02/22 18:51, 1F

02/22 18:52, , 2F
於台灣時間18點,將時區改成東京,也就是顯示19點
02/22 18:52, 2F

02/22 18:52, , 3F
trace的結果
02/22 18:52, 3F

02/22 18:53, , 4F
GMT=8 估計他會依照網路位置取得正確時區(台灣的+8)
02/22 18:53, 4F

02/22 18:53, , 5F
getHours = 19 也就是設定的東京時間
02/22 18:53, 5F

02/22 18:54, , 6F
watch.getHours()+GMT = 27
02/22 18:54, 6F

02/22 18:56, , 7F
setHours(watch.getHours()) = 1393095346408
02/22 18:56, 7F

02/22 18:56, , 8F
setHours(watch.getHours()+ GMT) = 1393124146408
02/22 18:56, 8F

02/22 18:57, , 9F
所以並沒有如文中說的一樣,可能你是用台灣時區去測
02/22 18:57, 9F

02/22 18:58, , 10F
另外watch.setHours(watch.getHours()+ GMT)之後
02/22 18:58, 10F

02/22 18:58, , 11F
watch.getUTCHours() 就顯示18點,在這之前會是10點
02/22 18:58, 11F

02/22 18:59, , 12F
估計是格林威治那邊的標準時間,所以問題還是在GMT
02/22 18:59, 12F

02/22 19:00, , 13F
如果使用內定函數會取得國際標準時間跟設定的時區時間
02/22 19:00, 13F

02/22 19:00, , 14F
但是GMT看似會依照位置顯示所在地正確時區
02/22 19:00, 14F

02/22 19:01, , 15F
所以以GMT為標準(setHour)之後則可用函數取得正確時間
02/22 19:01, 15F

02/22 19:37, , 16F
感謝K大!
02/22 19:37, 16F
文章代碼(AID): #1J1rR1lI (Flash)
文章代碼(AID): #1J1rR1lI (Flash)