簡體   English   中英

如何將字符串日期轉換為特定格式?

[英]How to convert string date to specific format?

我正在嘗試從特定格式的字符串中獲取日期,例如:

 const format = 'MM/dd/yyyy HH:mm'; const dt = "2021-03-11T22:00:00.000Z"; // expecting "03/11/2021 22:00" console.log(moment(dt).format(format)); // but getting "03/Th/yyyy 23:00"
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

我嘗試了 js date、moment、luxon,但我不明白如何做到這一點:(
我懷疑000Z出了問題,但這是我得到的日期。

Moment.js 和 Luxon 的區別在於格式鍵的大小寫。 請查看密鑰/令牌表。

注意: Moment.js 已被棄用,取而代之的是團隊的新庫 Luxon 和ECMA-402中引入的其他 ECMA 腳本標准。 如果您現在正在考慮使用 Moment.js,只需切換到 Luxon。


如果您使用的是 Luxon,則可以在格式化日期之前調用.toUTC() 確保您的日期 ( dd ) 和年份 ( yyyy ) 格式鍵是小寫的。

 const DateTime = luxon.DateTime; const format = 'MM/dd/yyyy HH:mm', dt = "2021-03-11T22:00:00.000Z"; console.log(DateTime.fromISO(dt).toUTC().toFormat(format)); // 03/11/2021 22:00
 <script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/1.26.0/luxon.min.js"></script>

如果您使用 Moment.js,您可以在格式化日期之前調用.utc() 確保您的日期 ( DD ) 和年份 ( YYYY ) 格式鍵是大寫的。

 const format = 'MM/DD/YYYY HH:mm', dt = "2021-03-11T22:00:00.000Z"; console.log(moment(dt).utc().format(format)); // 03/11/2021 22:00
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

您的格式字符串錯誤,應該是: 'MM/DD/YYYY HH:mm'

然后,如果您的日期帶有':000Z' ,則應使用substring()方法將其刪除。

工作代碼:

 const format = 'MM/DD/YYYY HH:mm'; const dateString = "2021-03-11T22:00:00:000Z"; const date = dateString.substring(0, dateString.length - 5); console.log(moment(date).format(format)); // prints 03/11/2021 22:00
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

您需要使用YYYY而不是yyyyDD而不是dd以獲得預期的結果。
順便說一句,我建議使用 Moment 以外的另一個庫,例如 dayjs。

暫無
暫無

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

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