我有一個將日期設定為UTC 0的函式。 就像這樣:
const removeDateTimestamp = (date) => {
return new Date(
date.getUTCFullYear()。
date.getUTCMonth()。
date.getUTCDate()。
0,
0,
0,
0, 0.
);
};
但問題是當我使用它時。如果我在瀏覽器的控制臺中使用,我得到這樣的結果:
2021年5月15日星期六00:00:00 GMT 0200 (歐洲中部時間)
但是當我在Jest上運行測驗時,我得到了這個其他的結果:
Received has type: date
Received具有value。2021-05-14T22:00:00.000Z
it("removeDateTimestamp", () => {
expect(removeDateTimestamp(new Date(2021, 4, 16))。 toMatch(
/2021-05-16T00:00:00.000Z/i
);
});
在第一個例子中,我有Sat May 15 2021 00:00:00 GMT 0200,當通過的日期是16,而在第二個例子中,同一天是14.
。我顯然忽略了一些重要的東西,但我沒有看到它。
uj5u.com熱心網友回復:
Date建構式以本地時間解釋其引數。要從使用UTC的部分獲得一個Date實體,請使用Date.UTC(它回傳一個毫秒級的距今值,所以如果你想要一個Date實體,你將其結果傳遞給new Date):
const removeDateTimestamp=(date)=> {
return new Date(
Date.UTC(
date.getUTCFullYear()。
date.getUTCMonth()。
date.getUTCDate()。
0,
0,
0,
0, 0.
)
);
};
FWIW,這里有另一種方法來做你上面所做的同樣的事情:
const removeDateTimestamp=(date)=> {
const newDate = new Date( date); // Clone the date -- the ` ` is important
//在一些JavaScript引擎上。
newDate.setUTCHours(0, 0, 0, 0) 。
return newDate。
};
我還應該提到,有一種方法可以通過新的 Temporal API來實作,該API將很快進入標準庫(已經進入階段 3)。
uj5u.com熱心網友回復:
T.J.有詳細的答案,我找不到合適的復制品,所以我把這個作為解決你問題的簡化版發布。
。const getUTCTimeZero = (date) => new Date(date - date % 8. 64e7)。)
console。 log(getUTCTimeZero(new Date())
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
名稱removeDateTimestamp有點誤導,因為時間戳是代表日期或時間的任何字串或數字(或許是數值)。你似乎只是想把時間設定為零,因此使用了不同的名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/310882.html
標籤:
