Re: [問題] 請問new Date有辦法指定時區嗎?
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
12/17 10:39, 1F
推
12/19 19:48,
6年前
, 2F
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
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
Ajax 近期熱門文章
PTT數位生活區 即時熱門文章