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

问题描述 投票:0回答:3

我一直在尝试使用 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
javascript date momentjs date-fns
3个回答
62
投票

如您所见,使用

moment
lib,我们需要 2 个步骤才能获得结果:将字符串解析为
Date
对象,然后将日期对象格式化为字符串。

您的代码 -

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

解决方案是与

moment
lib 执行相同的操作:

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

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

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

    结果将类似于(与我所在时区的时刻结果相同):

     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

0
投票

与 Moment.js 不同,date-fns 不会自动解析“10-13-20”等非标准日期字符串。

1.解析日期字符串

parse函数允许您指定输入字符串的格式。

const parsedDate = parse("10-13-20", 'MM-dd-yy', new Date());

2.设置解析日期的格式

一旦获得解析后的 Date 对象,就可以使用 date-fns 的格式化函数对其进行 format

const formattedDate = format(parsedDate, "yyyy-MM-dd'T'HH:mm:ssxxx");

奖励:解析为 ISO 字符串

console.log(parseISO("2014-02-11T11:30:30"));
// Tue Feb 11 2014 11:30:30 GMT+0100 (Central European Standard Time)

演示

const parsedDate = dateFns.parse("10-13-20", 'MM-dd-yy', new Date());

const formattedDate = dateFns.format(parsedDate, "yyyy-MM-dd'T'HH:mm:ssXXX");
console.log(formattedDate)
<script src="https://cdn.jsdelivr.net/npm/[email protected]/cdn.min.js"></script>

© www.soinside.com 2019 - 2024. All rights reserved.