【问题标题】: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

标签: javascript date-fns


【解决方案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/parseparse( "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 抛出“无效日期”错误的格式。 stackoverflow.com/questions/3085937/…
    • 1990-04-20T17:47:38.000000Z这是一个有效的时间字符串,这里包含时区数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    相关资源
    最近更新 更多