看板 Ajax
作者 eight0 (人類)
標題 Re: [問題] 請問new Date有辦法指定時區嗎?
時間 Mon Dec 17 02:36:15 2018


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
Date - JavaScript | MDN
Creates a JavaScript Date instance that represents a single moment in time. Date objects use a Unix Time Stamp, an integer value that is the number of ...

 
  縮︰https://is.gd/HaOfhJ
Date - JavaScript | MDN
Creates a JavaScript Date instance that represents a single moment in time. Date objects use a Unix Time Stamp, an integer value that is the number of ...

 

--
ヾ(;ω;) ヾ(;ω;)

http://i.imgur.com/oAd97.png

--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.225.186.4
※ 文章代碼(AID): #1S5fifod (Ajax)
※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1544985385.A.CA7.html
※ 同主題文章:
Re: [問題] 請問new Date有辦法指定時區嗎?
12-17 02:36 eight0.
cutekid: 大推呀(Y), 總是可以從 eight0 大回覆的文章裡學到東西!1F 12/17 10:39
JustinHere: 用個datatime library之類的,別自己算這類東西。
除非不在意誤差,不然日期時間處理是很複雜的。2F 12/19 19:48
wotupset: 專業!4F 12/20 11:35

--