关于javascript:以字符串解析和格式化日期

Parse and format date in string

我正在尝试date-fns v2。

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

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

但是出现以下错误:

RangeError: Invalid time value


date-fns 2.0.0-alpha.27(演示:https://stackblitz.com/edit/js-tztuz6)

使用parseISO:

1
2
import { format, parseISO } from 'date-fns'
const formattedDate = format(parseISO('2019-02-11T14:00:00'), 'MM/dd/yyyy');

date-fns v1.30.1(演示:https://stackblitz.com/edit/js-mt3y6p)

使用解析:

1
2
import { format, parse } from 'date-fns'
const formattedDate = format(parse('2019-02-11T14:00:00'), 'MM/DD/YYYY');


似乎您使用的是date-fns的2.0版,当前仍处于alpha(开发)状态。

可用的功能及其工作方式似乎仍经常变化。 例如,虽然在v2.0.0-alpha.26版本中toDate()可以处理字符串参数,但在v2.0.0-alpha.27版本中不能再执行此操作。 而是有一个新的parseISO()函数。

现在应该可以使用:

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

但是,尽管版本2仍处于测试阶段,但我建议暂时使用稳定的版本1.x。


toDate方法无法读取该格式。

尝试将其转换为Date:

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

顺便说一句,还有一个案例可以验证:

1
2
3
4
5
6
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())
}