date-fns:使用给定的格式解析日期字符串

3

我希望在我的一个项目中,用date-fns替换moment

我只使用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
})

首先,我不确定在本地格式中应该使用MMMM还是LLLL来表示月份。

然而,我遇到了以下错误:

从v2.0.0-beta.1开始,date-fns不再接受字符串作为参数。请使用`parseISO`来解析字符串。请参见:https://git.io/fjule

因此,我查看了关于parseISO的文档,在其中说明它将“解析以ISO 8601格式给定的字符串并返回日期实例。”这并不是我所需要的,因为我的日期字符串既不是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参数是一个字符串。

所以,我真的对这个问题感到困惑,不知道它是否是一个问题。

有人能否给我提供一些帮助/见解?

1个回答

4

你离它很近了。

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年1月23日12:18:23.000Z

谢谢,那时候解决了问题(很抱歉没有早点回复/接受,有点忘了)。 - Nicolas Goudry

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