我想更换 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
})
首先,我不知道是否应该使用 MMMM
或 LLLL
为locale格式的月份。
总之,我得到以下错误。
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
函数,这似乎更适合我的用例。所以我尝试了.NET函数。
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
参数是......一个字符串!
所以,我对这个问题其实很迷茫,如果它是一个问题的话。
谁能给我一些关于这个问题的帮助?
你非常接近它。
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