簡體   English   中英

使用moment.utc()將日期錯誤地轉換為“天”格式的utc格式-Moment Javascript

[英]Using moment.utc() incorrectly converting the date into utc format of “days” format-Moment Javascript

我正在使用矩型庫將日期轉換為utc格式。 這是我的日期字符串:

var dateString = "2019-01-31T11:33:16.952+0000";

new Date("2019-01-31T11:33:16.952+0000") // o/p: Thu Jan 31 2019 03:33:16 GMT-0800 (Pacific Standard Time)因為該日期距離今天的日期不到一周日期,我正在嘗試顯示“ n天前”而不是實際日期的文本。 但是出於某種原因,我這樣做時得到的將來日期顯示為“ 6天前”:

moment.utc("2019-01-31T11:33:16.952+0000").local().fromNow() // shouldnt this display "5 days ago"??

不知道為什么現在沒有正確地轉換日期,這里有什么主意嗎?

我猜(考慮使用local()會轉換為您的本地時區,因此會扣除時間,因為您可能在-ve TimeZone中), 此答案是您期望的解決方案:

理想情況下,您希望將UTC時間戳從服務器傳遞到客戶端。 這並不意味着您必須將整個服務器切換到UTC,而只是意味着您需要先將數據庫中的時間轉換為服務器上的UTC,然后再通過網絡發送。 當然,如果您將時間實際存儲在UTC中會更好,但是您說您現在無法進行此類更改。 但是,讓我們僅假設您根本無法更改服務器上的任何內容。

我們還將假設您的服務器固定為UTC-07:00偏移量。 在現實生活中,這僅適用於諸如亞利桑那州這樣不遵循夏令時的地方。 因此,如果您在洛杉磯並且在太平洋時間,則您的某些數據基於UTC-07:00,但有些數據則基於UTC-08:00。 如果要使用JavaScript,則需要做更多的工作。

我們還假設輸入已經是ISO8601格式的字符串。 (如果不是,請告訴我,我將調整此代碼。)

var s =“ 2013-09-11 18:00:00”; //來自action.timeStamp

var actionTime = moment(s +“ -07:00”,“ YYYY-MM-DD HH:mm:ssZ”);

var timeAgo = actionTime.fromNow(); 您的其他代碼不起作用的原因是,在第一行中,您受到瀏覽器時區的影響。 第二行中的區域設置器僅更改格式化區域,而不更改實際時間。

另外,當您將一些時間轉儲到控制台進行調試時,請確保將其格式化以進行輸出。 否則,您只是在查看其內部屬性值,可能直接或可能不合理。

暫無
暫無

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

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