Преобразование строки даты «человека» другого языка в объект даты в JavaScript - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь преобразовать следующий набор строк:

juin 2016 septembre 2013 janvier 2013 juillet 2010

Все они на французском языке, поэтому при использовании new Date() по умолчанию January:

new Date('juin 2016') // -> Fri Jan 01 2016 00:00:00
new Date('août 2013') // -> Tue Jan 01 2013 00:00:00

Принимая во внимание, что это должно быть:

new Date('juin 2016') // -> Wed Jun 01 2016 00:00:00
new Date('août  2013') // -> Thu Aug 01 2013 00:00:00

Можно ли узнать месяцы из других языков? Или единственный способ - вручную перевести месяцы в английский sh?

Ответы [ 6 ]

1 голос
/ 28 января 2020

Поскольку переводите месяцы, вам могут не понадобиться сторонние библиотеки. Простой обходной путь, как показано ниже:

var FrenchToEnglishMonths = 
{'janvier':'January','février':'February','mars':'March','avril':'April','mai':'May','juin':'June','juillet':'July','aout':'August',
'septembre':'September','octobre':'October','novembre':'November','décembre':'December'};  
var frenchDate  = 'juin 1,2016'; 
var frenchMonth = frenchDate.split(" ")[0].toLowerCase();//get the french month
var englishMonth= FrenchToEnglishMonths[frenchMonth];//find the corresponding english month
var englishDate = frenchDate.replace(frenchMonth,englishMonth);//replace the french month with the english month  
var date        = new Date(englishDate); //tadaa...
1 голос
/ 28 января 2020

К сожалению, для этого нет собственного API.

Если вы знаете формат, его легко конвертировать без большой библиотеки:

const months = ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"];

function getDateFromMonthYear(input) {
  const parts = input.split(" ");
  if (parts.length != 2) throw Error(`Expected 2 parts, got ${parts.length}: "${input}"`);
  const [searchMonth, year] = parts;
  const month = months.indexOf(searchMonth.toLowerCase());
  if (month < 0) throw Error(`Unknown month: "${searchMonth}"`);
  return new Date(year, month, 1);
}


["juin 2016", "septembre 2013", "janvier 2013", "juillet 2010"].forEach(date =>
  console.log(
    date,
    " -> ",
    getDateFromMonthYear(date).toDateString()
  )
);

Существует новый Intl API , который можно использовать для получения названий месяцев поддерживаемых языков:

function getFullMonthName(locale) {
  const int = new Intl.DateTimeFormat(locale, { month: "long" });
  const out = [];
  for (let month = 0; month < 12; ++month) out[month] = int.format(new Date(2020, month, 3));
  return out;
}

["sv-SE", "fr-FR", "en-US", "en-UK"].forEach(locale => console.log(locale, getFullMonthName(locale).join(', ')));
1 голос
/ 28 января 2020

Вы можете просто создать объект для перевода месяцев с французского на английский sh:

const frToEn = {
    "janvier":"january",
    "février":"february",
    "mars":"march",
    "avril":"april",
    "mai":"may",
    "juin":"june",
    "juillet":"july",
    "août":"august",
    "septembre":"september",
    "octobre":"october",
    "novembre":"november",
    "décembre":"december"
}

function getDate(input) {
    const date = input.split(" ");
    const month = frToEn[date[0].toLowerCase()];
    const year = date[1];
    return new Date(`${month} ${year}`);
}

getDate("juin 2016");
getDate("août 2013");
0 голосов
/ 28 января 2020

Вы можете использовать это для справки:

const OnlyMonth = { month: 'long' }
  ,   listMonths = Array(12).fill('').map((x,m)=>(new Date(Date.UTC(2000, m, 1, 1, 0, 0))).toLocaleDateString('fr-FR', OnlyMonth))
  ;
console.log( JSON.stringify(listMonths,0,2) )
.as-console-wrapper { max-height: 100% !important; top: 0; }

PS: https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes

0 голосов
/ 28 января 2020

Вы можете использовать библиотеку для перевода этих месяцев на английский язык sh как

dbrekalo / translate- js

0 голосов
/ 28 января 2020

Я бы посоветовал вам использовать момент js (момент js .com / docs / # / i18n)

[EDITED]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...