【问题标题】:formating iso 8601 to "MMM" and "hourPM/AM" using moment js使用 moment js 将 iso 8601 格式化为“MMM”和“小时 PM/AM”
【发布时间】:2021-03-01 17:47:40
【问题描述】:

我的日期格式如下:

"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 获得所需的格式日期?

【问题讨论】:

    标签: javascript date momentjs iso8601


    【解决方案1】:

    您需要将字符串作为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。否则,正确的方法是在不更改时区的情况下将字符串格式化为正确的日期。

    【讨论】:

    • 初始字符串似乎是 UTC,但 str.slice(0,19) 将删除偏移指示符,因此它被解析为本地。
    • @RobG OP 的预期结果需要这个实现,据说3am 不是5am
    • “5am”从何而来? OP 希望“2021-01-16T03:00:000Z”(即 UTC)变为“类似于…… Jan 16 - 3am”。将其解析为本地意味着它可能不再是 03:00 UTC。答案中应指出时区的变化。不改变时区的另一种方法是使用utc method
    • @RobG 你说得对,这需要进一步澄清,我更新了答案。
    【解决方案2】:

    你可以试试这个吗:

    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

    【讨论】:

    • 我再次收到“无效日期”!
    猜你喜欢
    • 2021-01-19
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 2011-05-27
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    相关资源
    最近更新 更多