使用moment js将iso 8601格式化为“MMM”和“hourPM/AM”

问题描述

我的日期格式如下:

"2021-01-16T03:00:000Z"

我想使用 momentJs 得到类似下面的内容

Jan 16 - 3am

我已经编写了这段代码,但它给了我 invalid date 错误(我知道 .format() 参数不是我想要的日期,但我在第一步中坚持从中获取有效日期,并且我找不到我应该为我想要的格式传递哪个参数):

moment("2021-01-16T03:00:000Z").format("YYYY-MM-DD h:mm:ss a");

如何使用 momentJs 获取所需的格式日期?

解决方法

你能试试这个吗:

const a = moment("2021-01-16T03:00:00Z")
let   b = a.format("MMM Do [-] h a")
// MMM Do [-] h a
console.log(b)

你还有一个他想要的 0 : 2021-01-16T03:00:00[0]Z

,

您需要将字符串作为 YYYY:MM:DDTHH:MM:SS 传递给它:

const getDateFormatted = str => {
  const date = str.slice(0,19);
  return moment(date).format("MMM DD - h a");
}
console.log( getDateFormatted("2021-01-16T03:00:000Z") );
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous"></script>

编辑:由于 OP 的预期时间是 3am,而 moment("2021-01-16T03:00:00Z").format("MMM DD - h a") 会将时间指定为 5am,因此可以在此处 split。否则,正确的方法是在不更改时区的情况下将字符串格式化为正确的日期。