[英]Why does using Date.UTC() return a completely different month value compared to Date()?
我最近一直在使用 Dates 進行一個項目,並注意到一些我認為沒有意義的奇怪事情(或者,至少對我來說沒有意義)。
在javascript中,你可以創建一個新的日期,默認情況下,如果你得到月份,它會返回當前月份的數字減一。
let dt = new Date();//Assume 30/8/2018
dt.getMonth();// returns 7
您還可以使用現有日期創建一個從 UTC 運行的新日期,並且因為 javascript 的.getMonth()方法 Dates 總是返回月份數減一,您添加一個以獲得正確的月份......但是, Date.UTC (...)返回下個月而不是當前/正確的月份
(假設下面代碼片段中的dt與上面帶有當前時間的代碼片段相同)
let utc_dt = new Date(//Assume 30/8/2018
Date.UTC(
dt.getFullYear(),
dt.getMonth()+1,
dt.getDate(),
dt.getHours(),
dt.getMinutes(),
dt.getSeconds()
)
);
utc_dt.getMonth();// returns 9
與Date()相比,為什么使用Date.UTC()返回完全不同的月份值?
我知道 UTC 和瀏覽器的時間通常不一樣,但肯定不會在一個月內消失嗎?
除了 +1 之外, dt.getMonth()
根據系統設置返回本地月份,而 Date.UTC 會將第二個參數解釋為UTC 月份。
UTC 月份因本地時區在該月最后一天/第一天午夜任一側偏移的時間段而異。 因此,如果今天是本地的 8 月 31 日,那么您加 1,即要求 9 月 31 日滾動到 10 月 1 日。
同樣,時區偏移意味着這種影響會在時區偏移期間擴展,因此似乎發生在不合邏輯的時間。
取自此頁面:
使用的參數:
[…]
- 月份:指定一個 0 到 11 之間的整數表示月份。
[…]
這意味着,您只需傳遞一個介於 0 和 11 之間的值,其中 0 代表一月,而 11 代表十二月:
let dt = new Date(); //Assume 30/8/2018 console.info(dt.getMonth()); // returns 7 let utc_dt = new Date( //Assume 30/8/2018 Date.UTC( dt.getFullYear(), dt.getMonth(), dt.getDate(), dt.getHours(), dt.getMinutes(), dt.getSeconds() ) ); console.info(utc_dt.getMonth()); // returns 7
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.