第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 Node/JavaScript 中的日期格式化為 UTC

將 Node/JavaScript 中的日期格式化為 UTC

慕的地6264312 2023-03-03 15:36:11
我正在使用 Node/Express 服務(wù)器在將日期發(fā)送到瀏覽器之前對其進行格式化。我的日期以 UTC 格式保存在數(shù)據(jù)庫中,例如:2020-09-15 11:52:22.000我現(xiàn)在想格式化這個日期,不改變它,并將它發(fā)送到瀏覽器,所以無論節(jié)點服務(wù)器在哪里,也不管瀏覽器在哪里,它總是顯示這個 UTC 日期。查看此日期的人將來自美國、英國、歐盟,但我希望他們都看到相同的 UTC 日期。我在英國,正在使用date-fns,目前正在本地運行 Node。我的應(yīng)用程序已經(jīng)使用date-fns,我不想只為這個任務(wù)添加另一個日期/時間依賴項。如果我這樣做:const d = format(new Date('2020-09-15 11:52:22.000'), 'dd MMM yyyy HH:mm:ss')我得到:15 Sep 2020 12:52:22... 那是我當(dāng)?shù)貢r間(英國,英國夏令時)的日期。如果有一件事讓我感到困惑,那就是日期和時間!:-)在 Node 中,我如何獲取2020-09-15 11:52:22.000并格式化它以獲得15 Sep 2020 11:52:22..?
查看完整描述

3 回答

?
慕田峪7331174

TA貢獻1828條經(jīng)驗 獲得超13個贊

你的問題是:

new Date('2020-09-15 11:52:22.000')

強烈建議不要對不受支持的格式使用內(nèi)置解析器。它依賴于實現(xiàn),并且通常在不同的實現(xiàn)中返回不同的結(jié)果。

此外,該字符串沒有時區(qū),因此應(yīng)被視為本地時區(qū)。因此,即使解析正確,對于具有不同偏移量的每個地點,它也會代表不同的時間點。

Date-fns 有一個功能強大的解析器,所以你應(yīng)該使用它而不是內(nèi)置的解析器。如果您希望將時間戳視為 UTC,最簡單的方法是添加尾隨“Z”和時區(qū)標(biāo)記以進行解析。

要支持輸出時區(qū),您必須包含date-fns-tz。以下是您可以在npm.runkit運行的一些代碼。格式部分似乎產(chǎn)生了正確的結(jié)果,但是如果將時區(qū)標(biāo)記添加到格式字符串(即“X”或“XX”),它會顯示本地時區(qū)偏移量,而不是應(yīng)用于字符串的時區(qū)偏移量,以便顯示正確偏移,你必須手動添加它(我認為這是 date-fns-tz 中的一個錯誤)。

const dateFns = require("date-fns");

const { zonedTimeToUtc, utcToZonedTime, format } = require('date-fns-tz');


let timestamp = '2020-09-15 11:52:22.000';

let tz = 'Z';

let date = dateFns.parse(timestamp + tz, 'yyyy-MM-dd HH:mm:ss.SSSX', new Date()); 

// Show timestamp was parsed as UTC

console.log(date.toISOString()); // 2020-09-15T11:52:22.000Z


// Produce UTC output - need to set timezone first

let utcDate = utcToZonedTime(date, 'UTC');

// Manually add timezone to formatted string

console.log(format(utcDate, 'd MMM yyyy HH:mm \'UTC\'', 'UTC')); // 15 Sep 2020 11:52 UTC

請注意,utcToZonedTime(date, 'UTC')實際上創(chuàng)建了一個由指定偏移量修改的新日期并將其分配給utcDate,我認為這是一個真正的問題。如果您知道它是如何被修改的,它現(xiàn)在才有用,您不知道它實際應(yīng)該代表什么時間。在這種情況下,它可能很清楚,因為我們使用的是 UTC,但其他偏移量問題更大。


如果初始時間戳采用 ECMAScript 支持的格式,例如與toISOString生成的格式相同:2020-09-15T11:52:22.000Z,將會節(jié)省很多精力。


查看完整回答
反對 回復(fù) 2023-03-03
?
蝴蝶不菲

TA貢獻1810條經(jīng)驗 獲得超4個贊

您可以嘗試這樣做(我的時區(qū)是 +2 GTM)


解析您的日期以獲得 UTC 字符串

const parsedDate = parse('2020-09-15 11:52:22.000', 'yyyy-MM-dd HH:mm:ss.SSS', new Date()).toUTCString(); 

// Tue, 15 Sep 2020 09:52:22 GMT

// or simply 

// new Date('2020-09-15 11:52:22.000').toUTCString();

    

// format a new date starting from UTC format 

// new Date(parsedDate) --> Tue Sep 15 2020 11:52:22 GMT+0200

const date = format(new Date(parsedDate), 'dd MMM yyyy HH:mm:ss');

格式中的新 Date(parsedDate) 會將 utc 重新轉(zhuǎn)換為您的時區(qū)


查看完整回答
反對 回復(fù) 2023-03-03
?
達令說

TA貢獻1821條經(jīng)驗 獲得超6個贊

你應(yīng)該使用https://momentjs.com/

例如:

moment().format('Do MMMM YYYY, h:mm:ss');


查看完整回答
反對 回復(fù) 2023-03-03
  • 3 回答
  • 0 關(guān)注
  • 293 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號