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

Posted

技术标签:

【中文标题】在字符串中解析和格式化日期【英文标题】:Parse and format date in string 【发布时间】:2019-06-23 21:15:29 【问题描述】:

我正在试用date-fns v2。

我想使用toDateformat 函数来格式化字符串中的日期:

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

但是得到以下错误:

RangeError:时间值无效

【问题讨论】:

这些函数(format()toDate())应该是什么,或者它们来自哪里?这些不是标准的 javascript toDate() 来自哪里?检查语法。我以为应该是format(toDate('2019-02-11T14:00:00'), 'yyyy-mm-ddThh:mm:ss') date-fns 有parse 函数但没有toDate 函数 @phuzi 新的 2.0 alpha 版本有一个 toDate() 函数。 date-fns.org/v2.0.0-alpha.26/docs/toDate 【参考方案1】:

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

可用的功能以及它们的工作方式似乎仍然经常变化。例如,在版本 v2.0.0-alpha.26 toDate() can handle string parameters 中,它在版本 v2.0.0-alpha.27 中为 cannot do that any longer。有一个新的parseISO() 函数代替。

现在应该可以工作了:

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

不过,虽然第 2 版仍处于测试阶段,但我建议暂时使用稳定版 1.x。

【讨论】:

事实上,我建议根本不要使用该库。引入所有从版本 1 到版本 2 的重大更改,并在开发版本 2 时再次完全更改界面多次意味着它们将来可能会引入进一步的重大更改...... 我必须同意你。但与 moment.js 相比,date-fns 更快更轻。【参考方案2】:

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

使用parseISO:

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)

使用parse:

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

【讨论】:

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

顺便说一句,还要验证一个案例:

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())

【讨论】:

【参考方案4】:

toDate 方法无法读取该格式。

尝试像这样转换为日期:

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

【讨论】:

投了反对票,因为尝试这样做是让我首先研究 date-fns 的原因 - 这正是 Safari 抛出“无效日期”错误的格式。 ***.com/questions/3085937/… 1990-04-20T17:47:38.000000Z这是一个有效的时间字符串,这里包含时区数据。

以上是关于在字符串中解析和格式化日期的主要内容,如果未能解决你的问题,请参考以下文章

date

java 8及以下版本的日期时间格式化与解析

如何获取由 Carbon::parse() 解析日期时间字符串的格式说明符

JS 日期格式化和解析工具

java基础知识日期处理

在django tables2中解析ISO 8601日期格式