如何使用 date-fns 格式化日期?

Posted

技术标签:

【中文标题】如何使用 date-fns 格式化日期?【英文标题】:How to format date with date-fns? 【发布时间】:2021-01-29 09:17:22 【问题描述】:

我一直在尝试使用 date-fns 格式化日期,但一直失败。基本上我在momentJS上工作得很好,但在date-fns上却不行:

这是我的约会日期:

"10-13-20" // month, day, and year

现在有了 momentJS,它就可以像这样工作了:

let result = moment("10-13-20", 'MM-DD-YY').format()
// result = "2020-10-13T00:00:00-06:00"

所以我尝试使用 date-fns 做同样的事情,但没有运气。谁能指出我正确的方向?提前致谢!

let result = format(new Date("10-13-20"), 'MM-DD-YY') // Not working

【问题讨论】:

new Date("10-13-20") 至少在 Firefox 和 Safari 中返回无效的日期。见Why does Date.parse give incorrect results? 【参考方案1】:

如您所见,使用moment lib,我们需要2个步骤来获得结果:将字符串解析为Date对象,然后将日期对象格式化为字符串。

您的代码 - format(new Date("10-13-20"), 'MM-DD-YY')format 步骤,尝试将日期对象转换为格式模板为 MM-DD-YY 的字符串。但是您的日期对象不正确。

解决方案与moment lib 相同:

    将日期字符串解析为日期对象。使用parse

    const dateString = '10-13-20';
    const date = parse(dateString, 'MM-dd-yy', new Date()) // not MM-DD-YY
    

    将日期对象格式化为结果字符串。使用format

    const result = format(date, "yyyy-MM-dd'T'HH:mm:ss.SSSxxx")
    console.log(result)
    

    结果会像(与我所在时区的时刻结果相同):

     2020-10-13T00:00:00.000+09:00
    

【讨论】:

【参考方案2】:
const date = "2021-12-20"
console.log(format(parseISO(date), "dd-MM-yyyy"));
// output: 20-12-2021

【讨论】:

以上是关于如何使用 date-fns 格式化日期?的主要内容,如果未能解决你的问题,请参考以下文章

使用 date-fns 2.x 版时,如何将日期时间格式化为 am/pm,不带句点?

date-fns - 有没有办法获取短日期格式字符串

使用 ISO-8601 格式的 date-fns 获取当前日期

时刻 vs date-fns 语言环境日期格式

获取 date-fns 中两个日期之间的持续时间,以天:小时:分钟:秒格式

Date-fns 返回不正确的日期