※ 本文為 terievv 轉寄自 ptt.cc 更新時間: 2019-04-20 05:33:28
看板 Ajax
作者 標題 Re: [問題] 請問new Date有辦法指定時區嗎?
時間 Mon Dec 17 02:36:15 2018
timestamp 的值,是從 1970-01-01 00:00:00 (UTC) 開始計算,
每過 1ms 就增加 1。也可以說是從 1970-01-01 開始,到取得該
timestamp 的時間點為止,所經過的時間「量」。
每過 1ms 就增加 1。也可以說是從 1970-01-01 開始,到取得該
timestamp 的時間點為止,所經過的時間「量」。
它和時區、locale time 是沒有關係的。舉例來說,一台電腦放在台灣,
一台放在英國,同時對兩台電腦下達取得 timestamp 的命令,
所得到的值是相同的。
跟時區、locale time 有關的是「日期」。例如一個台灣人和一個英國人約好
12/17 早上八點通電話,若不確認時區,台灣人到早上八點打電話時,
英國人還在半夜睡覺。
反過來說,同一個 timestamp,用不同的時區換算成日期,所得到的結果也不同。
至於 JavaScript 中的 Date,它只是一個記錄了 timestamp 的物件,
並沒有儲存時區資訊。雖然它有提供把 timestamp 轉成日期的方法,
但都是採用系統時區或 UTC。
並沒有儲存時區資訊。雖然它有提供把 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 ...
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 ...
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 ...
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
推 : 大推呀(Y), 總是可以從 eight0 大回覆的文章裡學到東西!1F 12/17 10:39
推 : 用個datatime library之類的,別自己算這類東西。2F 12/19 19:48
推 : 除非不在意誤差,不然日期時間處理是很複雜的。
推 : 除非不在意誤差,不然日期時間處理是很複雜的。
推 : 專業!4F 12/20 11:35
--
※ 看板: terievv 文章推薦值: 0 目前人氣: 0 累積人氣: 787
回列表(←)
分享