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