Форматирование Javascript datetime месяц год

Я пытаюсь отформатировать информацию о дате, времени, году и месяце Javascript примерно так:

//"Mon, Nov 5 08:46:20 PM"

Для этого я следую документации Mozilla здесь, как показано ниже:

var options = {
  weekday: 'short',
  month: 'short',
  day: 'numeric',
  hour: "2-digit",
  minute: "2-digit",
  second: "2-digit",
  hour12: true
};
console.info(new Date().toLocaleDateString('en-US', options));
// always returns "Mon, Nov 5, 8:44:10 PM"

Почему hour имеет однозначный формат, хотя я указал его как "двухзначный"? Как мне достичь формата, указанного в начале этого вопроса? Заранее благодарим за ответы!

Не уверен, что это актуально, но какую среду вы используете для тестирования? (Какой браузер или это NodeJs?)

stealththeninja 06.11.2018 02:59

@stealththeninja Я использую последнюю версию консоли браузера Chrome. Надеюсь это ответит на твой вопрос...

user1330974 06.11.2018 03:00

@Barmar вы проверили ссылку на спецификацию, включенную в вопрос? И momentjs, хотя и хорош в датах, особенно в часовых поясах и регионах, представляет собой большую библиотеку.

stealththeninja 06.11.2018 03:12

Мне кажется, это ошибка Chrome.

Barmar 06.11.2018 03:18

Если вы установите "hour12: false", похоже, работает, похоже на ошибку.

Rafael Corradini da Cunha 06.11.2018 03:24

См. bugs.chromium.org/p/chromium/issues/detail?id=527926. Это для DateTimeFormat.format(), но я полагаю, что toLocaleDateString() использует тот же код и помечен как WONTFIX. Они утверждают, что это соответствует спецификации.

Barmar 06.11.2018 03:27

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

josephting 06.11.2018 03:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
7
88
1

Ответы 1

Вы можете использовать RegExp и String.prototype.replace() , чтобы исправить эту проблему:

const options = {
  weekday: 'short',
  month: 'short',
  day: 'numeric',
  hour: "2-digit",
  minute: "2-digit",
  second: "2-digit",
  hour12: true
};

// Tue, Nov 6, 04:04:55 AM: 
console.info(new Date(1541473495383).toLocaleDateString('en-US', options).replace(/, (\d):/, ', 0$1:'));

// Tue, Nov 6, 10:04:55 AM:
console.info(new Date(1541495095383).toLocaleDateString('en-US', options).replace(/, (\d):/, ', 0$1:'));

// Now:
console.info(new Date().toLocaleDateString('en-US', options).replace(/, (\d):/, ', 0$1:'));

Что делает .replace(/, (\d):/, ', 0$1:'):

  • Сопоставьте часть часа (которая идет после запятой, пробела и перед двоеточием) только в том случае, если она состоит из одной цифры (\d); в противном случае он не будет совпадать и ничего не заменит.

  • Захватывает эту цифру.

  • Замените все совпадение точно таким же, но добавив дополнительный 0 перед цифрой часа, к которому мы можем получить доступ в строке замены как $1.

Другие вопросы по теме