Javascript не может отформатировать дату в будний день, за которым следует день - PullRequest
2 голосов
/ 04 мая 2019

Если для форматирования даты используется встроенный в Intl.DateTimeFormat javascript, то если вы предоставите формат {weekday : 'short', day 'numeric'}, он будет переставлять два и всегда давать день, за которым следует день недели.

Для справки:

console.log(new Intl.DateTimeFormat('en-US', {
  weekday: 'short',
  day: 'numeric'
}).format(new Date));

Я бы ожидал Fri 3, но вместо этого я получил 3 Fri

Я использую это неправильно или это ошибка?

Непосредственный обходной путь, который я попробовал, состоит в том, чтобы отформатировать только для дня недели, затем для дня, затем добавить два, которые работают, но это не идеально для моего проекта.

Ответы [ 3 ]

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

Порядок вывода определяется локалью.

Если вы хотите избежать конкатенации, вы можете использовать другую английскую локаль, например en-AU:

    var date = new Date();

    console.log(new Intl.DateTimeFormat('en-AU', {
      weekday: 'short',
      day: 'numeric'
    }).format(date));

Список всех возможных локалей можно найти здесь (MDN) или здесь (StackOverflow).

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

Согласно MDN , правильный способ достижения желаемых результатов с согласованными результатами - использовать метод Intl.DateTimeFormat.prototype.formatToParts(), а затем вручную манипулировать данным массивом.

Мой первый подход будет следующим:

let date = new Date();
let order = ['weekday', 'day'];

new Intl.DateTimeFormat('en-US', {
    weekday: 'short',
    day: 'numeric'
}).formatToParts(date).filter((elem) => {
    return (elem.type !== 'literal');
}).sort((a, b) => {
    // SET ORDER
    let i = 0;
    a.index = -1;
    b.index = -1;
    order.forEach((type) => {
       if (a.type === type) {
           a.index = i;
       }
       if (b.type === type) {
           b.index = i;
       }
       i++;
    });
    return (a.index - b.index);
}).map(({type, value}) => {
    // MODIFY ELEMENT
    switch (type) {
        default : return (value);
    }
}).reduce((string, part) => string + ' ' + part);
0 голосов
/ 04 мая 2019

en-US всегда день / день недели, => использовать en-GB

let
  date3may = new Date('May 3, 2019 15:24:00'),
  Options  = {weekday:'short', day:'numeric'};

console.log(new Intl.DateTimeFormat('en-GB', Options).format(date3may));
...