簡體   English   中英

與 Date() 相比,為什么使用 Date.UTC() 返回完全不同的月份值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM