Форматирование Javascript дата время месяц год - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь отформатировать информацию о дате, году и месяце в 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.log(new Date().toLocaleDateString('en-US', options));
// always returns "Mon, Nov 5, 8:44:10 PM"

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

1 Ответ

0 голосов
/ 06 ноября 2018

Вы можете использовать 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.log(new Date(1541473495383).toLocaleDateString('en-US', options).replace(/, (\d):/, ', 0$1:'));

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

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

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

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

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

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

...