Re: [問題] 請問new Date有辦法指定時區嗎?

看板Ajax作者 (人類)時間6年前 (2018/12/17 02:36), 編輯推噓4(400)
留言4則, 3人參與, 6年前最新討論串2/2 (看更多)
timestamp 的值,是從 1970-01-01 00:00:00 (UTC) 開始計算, 每過 1ms 就增加 1。也可以說是從 1970-01-01 開始,到取得該 timestamp 的時間點為止,所經過的時間「量」。 它和時區、locale time 是沒有關係的。舉例來說,一台電腦放在台灣, 一台放在英國,同時對兩台電腦下達取得 timestamp 的命令, 所得到的值是相同的。 跟時區、locale time 有關的是「日期」。例如一個台灣人和一個英國人約好 12/17 早上八點通電話,若不確認時區,台灣人到早上八點打電話時, 英國人還在半夜睡覺。 反過來說,同一個 timestamp,用不同的時區換算成日期,所得到的結果也不同。 至於 JavaScript 中的 Date,它只是一個記錄了 timestamp 的物件, 並沒有儲存時區資訊。雖然它有提供把 timestamp 轉成日期的方法, 但都是採用系統時區或 UTC。 你的問題其實有兩部份︰ 第一個問題是︰如何將一個「日期」轉換成一個 Date (timestamp), 並且指定轉換時採用的時區? ※ 引述《taco2548 (T@cO)》之銘言: : 想請問new Date()的時候有辦法同時指定時區嗎? 如果不打算支援IE8的話,使用日期字串即可︰ // 台灣的早上八點 new Date("2018-12-17T08:00:00+0800") // 英國的早上八點 new Date("2018-12-17T08:00:00+0000") 格式可以參考︰ http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15 注意這兩個值(timestamp 的值)是不同的,因為它們分別代表不同的「時間點」。 第二個問題是︰如何將 timestamp 轉換成日期,取得 weekday, 並且指定轉換時採用的時區? : 確定是否為台灣時間星期日 Date 有提供把 timestamp 換算成 locale weekday 的方法︰ new Date(timestamp).getDay() 但這個方法換算時所採用的時區來自系統,不能指定。 要指定時區就只能手動換算了︰ new Date(timestamp + 8*60*60*1000).getUTCDay() +8*60*60*1000 的意思是,在該 timestamp 的時間點,英國 (UTC) 還要再等 八個小時,他們的「日期」才會和台灣在該時間點的「日期」 相同。 Reference: * MDN - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date 縮︰https://is.gd/HaOfhJ -- ヾ(;ω;) ヾ(;ω;) http://i.imgur.com/oAd97.png
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.225.186.4 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1544985385.A.CA7.html

12/17 10:39, 6年前 , 1F
大推呀(Y), 總是可以從 eight0 大回覆的文章裡學到東西!
12/17 10:39, 1F

12/19 19:48, 6年前 , 2F
用個datatime library之類的,別自己算這類東西。
12/19 19:48, 2F

12/19 19:51, 6年前 , 3F
除非不在意誤差,不然日期時間處理是很複雜的。
12/19 19:51, 3F

12/20 11:35, 6年前 , 4F
專業!
12/20 11:35, 4F
文章代碼(AID): #1S5fifod (Ajax)
文章代碼(AID): #1S5fifod (Ajax)