Дата и время в арабском c JavaScrript - PullRequest
2 голосов
/ 05 апреля 2020

У меня проблема с JavaScript функцией

var tDate = new Intl.DateTimeFormat("ar-US", { 
  day: 'numeric',
  month: 'long',
  year: 'numeric'
}).format(Date.now()) +
  '\xa0\xa0/ \xa0' +
  new Intl.DateTimeFormat("ar-FR-u-ca-islamic", {
  day: 'numeric', 
  month: 'long',
  year: 'numeric'
}).format(Date.now());

console.log(tDate);

выход на арабском c: 4 марта 2020 г. / 11 декабря 1441 г.

на английском языке sh: 5 апреля 2020 г. / Shaʻban 12, 1441 AH

в чем проблема в арабском c, номер 4 перенесен влево, почему ??

1 Ответ

0 голосов
/ 05 апреля 2020

Вывод форматирования даты с использованием объекта Intl не обязательно согласован между реализациями. Для меня код OP дает разные результаты в разных браузерах:

  • Safari: ٦ أبريل ، ٢٠٢٠/١٣ شعبان ، ١٤٤١
  • Firefox: ٦ أبريل ٢٠٢٠/١٣ شعبان ١٤٤١ 100
  • Chrome: 6 2020بريل 2020/13 14عبان 1441 هـ

Ни один из них не является одинаковым по формату или символам.

Если вы хотите убедитесь, что компоненты находятся в нужном порядке, используйте formatToParts , соберите детали и выведите их в нужном вам порядке. Просто убедитесь, что результат однозначный (например, используйте название месяца, как вы сделали).

let partsHeg = new Intl.DateTimeFormat('ar-FR-u-ca-islamic', {
  day: 'numeric', 
  month: 'long',
  year: 'numeric'
}).formatToParts(Date.now());

partsHeg.forEach(part => {
  if (part.type != 'literal') {
    console.log(part.type + ': ' + part.value);
  }
});

let partsGre = new Intl.DateTimeFormat('ar-US', {
  day: 'numeric', 
  month: 'long',
  year: 'numeric'
}).formatToParts(Date.now());

partsGre.forEach(part => {
  if (part.type != 'literal') {
    console.log(part.type + ': ' + part.value);
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...