在字符串中解析和格式化日期

25

我正在尝试使用date-fns v2。

我想通过使用toDateformat函数将日期格式化为字符串:

import { format, toDate } from 'date-fns'
format(toDate('2019-02-11T14:00:00'), 'MM/dd/yyyy')

但是出现了以下错误:

范围错误:无效的时间值


这些函数(format()toDate())是什么意思,或者它们来自哪里?它们不是标准的JavaScript。 - Pointy
toDate() 是从哪里来的?检查一下语法。我认为应该是 format(toDate('2019-02-11T14:00:00'), 'yyyy-mm-ddThh:mm:ss') - Praveen Kumar Purushothaman
date-fns有一个parse函数,但没有toDate函数。 - phuzi
@phuzi 新的2.0 alpha版本有一个toDate()函数。https://date-fns.org/v2.0.0-alpha.26/docs/toDate - NineBerry
4个回答

35

看起来你正在使用目前仍处于alpha(开发)状态的date-fns 2.0版本。

可用的函数及其工作方式似乎还在经常变化。例如,在v2.0.0-alpha.26版本中,toDate() 可以处理字符串参数,但在v2.0.0-alpha.27版本中不再支持这样做。现在有一个新的parseISO()函数。

现在应该可以正常工作:

format(parseISO('2019-02-11T14:00:00'), 'MM/dd/yyyy')

然而,虽然版本2仍处于测试版阶段,我建议现在使用稳定的1.x版本。


1
事实上,我建议根本不要使用这个库。从版本1到版本2引入所有这些破坏性变化,再次在开发版本2时完全改变接口多次,意味着他们可能会在未来引入进一步的破坏性变化... - NineBerry
2
我必须同意你的观点。但是与moment.js相比,date-fns更快、更轻。 - Zubli Quzaini

17

1
2.x版本中的parse()与1.x版本不同。在2.x版本中,它现在总是需要第二个参数来指定要理解的格式。 - NineBerry
@NineBerry,我更新了我的答案。现在它适用于1.x和2.x。 - Dawid Karabin
2
现在parse需要三个必要参数:https://date-fns.org/v2.26.0/docs/parse。parse( "22/11/2021", "dd/MM/yyyy", new Date() ) - Aman Godara

10

顺便说一下,还有一个案例需要验证:

import { isValid, parseISO, parse } from 'date-fns'

// Date valid
if (isValid(parseISO('2019-11-27 09:45:00'))) {
 let dt = parse('2019-11-27 09:45:00', 'yyyy-MM-dd HH:mm:ss', new Date())
}

0

方法toDate无法读取该格式。

尝试像这样转换为Date:

var date = new Date('2019-02-11T14:00:00')

1
因为尝试这样做是我首先查看 date-fns 的原因,所以被踩了。这正是 Safari 抛出“无效日期”错误的格式。https://dev59.com/N3A75IYBdhLWcg3w0sp9 - Jonas Rosenqvist
1990-04-20T17:47:38.000000Z 这是一个有效的时间字符串,其中包含时区数据。 - Md. A. Apu

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