date-fns: разобрать строку даты с заданным форматом - PullRequest
0 голосов
/ 24 января 2020

Я хотел бы заменить 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 для месяца в формате локали.

В любом случае, я получаю следующую ошибку:

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 является ... строкой!

Итак, я действительно заблудился в этом вопросе, если он вообще существует.

Может ли кто-нибудь дать мне некоторую помощь / понимание по этому поводу?

1 Ответ

0 голосов
/ 04 мая 2020

вы очень близки к этому.

 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

...