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

37
我一直在尝试使用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 中返回无效的日期。请参见为什么Date.parse给出不正确的结果? - RobG
2个回答

55

正如您所看到的,使用 moment 库,我们需要 2 步才能得到结果:将字符串解析为 Date 对象,然后将日期对象格式化为字符串。

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

解决方案是与 moment 库一样进行操作:

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

    const dateString = '10-13-20';
    const date = parse(dateString, 'MM-dd-yy', new Date()) // 不是 MM-DD-YY
    
  2. 将日期对象格式化为结果字符串。使用format

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

    结果将会像这样(与我的时区中moment的结果相同):

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

14
const date = "2021-12-20"
console.log(format(parseISO(date), "dd-MM-yyyy"));
// output: 20-12-2021

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接