【问题标题】:date-fns: Parse date string with given formatdate-fns:以给定格式解析日期字符串
【发布时间】:2020-05-10 20:14:48
【问题描述】:

我想在我的一个项目中将moment 替换为date-fns

来自moment,我只使用解析和时区(带有moment-timezone)功能:

const moment = require('moment-timezone')

const parseDatetime = function parseDatetime (datetime, format, tz = 'Europe/Paris', locale = 'fr') {
  return +moment.tz(datetime, format, locale, tz)
}

parseDatetime('jeudi 23 janvier 13:18:23', 'dddd DD MMMM HH:mm:ss')
// => 1579781903000
// Which outputs « 2020-01-23T12:18:23.000Z » (as expected) when given to Date constructor

使用date-fns,我尝试了format 功能(这似乎是我需要的):

const format = require('date-fns/format')
const fr = require('date-fns/locale/fr')

format('jeudi 23 janvier 13:18:23', 'EEEE dd MMMM HH:mm:ss', {
  locale: fr
})

首先,我不知道是否应该在语言环境格式中使用MMMMLLLL 表示月份。

无论如何,我收到以下错误:

Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule

所以我查看了有关 parseISO 的文档,其中声明它将“以 ISO 8601 格式解析给定的字符串并返回 Date 的实例。”。这不是我需要的,因为我的日期字符串不是 ISO 8601 格式或任何其他 ISO 格式。

我找到了parse 函数,它似乎更适合我的用例。所以我尝试了:

const parse = require('date-fns/parse')
const fr = require('date-fns/locale/fr')

parse('jeudi 23 janvier 13:18:23', 'EEEE dd MMMM HH:mm:ss', Date(), {
  locale: fr
})

这给了我与format 完全相同的错误!!!这种行为很奇怪,因为 parse 的文档指出 dateString 参数是……一个字符串!

所以,我实际上迷失在这个问题上,如果它是一个问题的话。

有人可以给我一些关于这方面的帮助/见解吗?

【问题讨论】:

    标签: momentjs date-fns


    【解决方案1】:

    你离它很近。

    const ParseDate = require('date-fns/parse') // https://date-fns.org/docs/
    const DateFrench = require('date-fns/locale/fr')
    let stringDate = 'jeudi 23 janvier 13:18:23'
    
    console.log(ParseDate(stringDate, 'EEEE dd MMMM HH:mm:ss', new Date(), { locale: DateFrench }))
    

    => 2020-01-23T12:18:23.000Z

    【讨论】:

    • 谢谢,当时就成功了(抱歉没有早点回复/接受,有点忘了)
    猜你喜欢
    • 2021-01-23
    • 2021-10-06
    • 2020-05-14
    • 2021-11-14
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    相关资源
    最近更新 更多