簡體   English   中英

從包含時區的字符串創建時刻日期時忽略時區

[英]Ignoring timezone when creating moment date from string containing timezone

在我的 Angular 項目中,我通過傳遞包含時區信息的日期字符串來創建時刻 object。

我想擺脫這些信息,並確保這個日期始終是同一天,無論我目前所在的時區如何。

我可以通過拆分日期字符串來做到這一點,如下所示:

let dateString = '2020-12-21T15:00:00+05:00'

let date = moment(dateString.split('T')[0]) 

但這可能不是正確的方法。 下面的代碼會讓我存檔同樣的東西嗎?

let date = moment(dateString, YYYY-MM-DD) 

在這兩種情況下,當我之后顯示日期時,我希望看到相同的結果:2020-12-21(無論我當前所在的時區如何):

console.log(date.format(YYYY-MM-DD)) // should always log 2020-12-21

另外,我發現其他帖子我應該使用 utc 方法,但它對我不起作用。 我只想完全擺脫時區信息,並在我的時區創建一個時刻,因為我只對日期感興趣而不是時間

moment.utc(dateString); 將時間轉換為 UTC 時間( Moment<2020-12-21T18:00:00Z>

使用moment(date, format)似乎是正確的方法

// fyi, my timezone offset is +7
console.log(moment("2020-12-21T023:00:00+05:00", "YYYY-MM-DD"));
// Moment<2020-12-21T00:00:00+07:00>

它也比.split稍快

console.time("format");
moment("2020-12-21T023:00:00+05:00", "YYYY-MM-DD");
console.timeEnd("format");

console.time("split");
moment("2020-12-21T023:00:00+05:00".split("T")[0]);
console.timeEnd("split");

/*
format: 0.475ms
split: 0.662ms
*/

改用moment.parseZone

 let date = moment.parseZone(dateString).format("YYYY-MM-DD");

這相當於

let date = moment(dateString).utcOffset(dateString).format("YYYY-MM-DD");

時刻文檔

Moment 的字符串解析函數,如 moment(string) 和 moment.utc(string) 接受偏移信息(如果提供),但將生成的 Moment object 轉換為本地時間或 UTC 時間。 相反, moment.parseZone() 解析字符串,但將生成的 Moment object 保留在固定偏移時區中,並在字符串中提供偏移量。

但我認為moment(dateString.split('T')[0])也是這樣做的正確方法。 它也更快

const dateString = "2020-12-21T23:00:00+05:00"; console.time("parzeZone"); moment.parseZone(dateString); console.timeEnd("parzeZone"); console.time("moment"); moment(dateString.split("T")[0]); console.timeEnd("moment"); /* parzeZone: 4.180ms moment: 0.356ms */

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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