如何使用 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 格式化日期?的主要内容,如果未能解决你的问题,请参考以下文章