#javascript #time #locale #intl #time-format
Вопрос:
Я использую javascript Date.prototype.toLocaleTimeString() (или эквивалентно: Intl.Формат даты и времени())
Мне нужно представление времени (особенно минуты и секунды) БЕЗ ведущего нуля (когда мин/сек меньше 10).
Например, 13:2:3
или 1:2:3 PM
(НЕ 13:02:03
или 1:02:03 PM
)
Но я не могу этого достичь:
const date = new Date('2/21/2021, 13:2:3')
const t1 = date.toLocaleTimeString('en-US') // 1:02:03 PM
const t2 = date.toLocaleTimeString('en-US', {timeStyle: 'medium'}) // 1:02:03 PM
const t3 = date.toLocaleTimeString('en-US', {timeStyle: 'short'}) // 1:02 PM
const t4 = date.toLocaleTimeString('en-US', {minute: '2-digit', second: '2-digit'}) // 02:03
const t5 = date.toLocaleTimeString('en-US', {minute: 'numeric', second: 'numeric'}) // 02:03
console.log(t1 'n' t2 'n' t3 'n' t4 'n' t5)
По данным MDN:
минута
Представление минуты. Возможными значениями являются
"numeric"
,"2-digit"
.второй
Представление второго. Возможными значениями являются
"numeric"
,"2-digit"
.
ПРИМЕЧАНИЕ: Для этого я не хочу использовать внешнюю библиотеку.
Комментарии:
1. Я думаю, что различие между
numeric
и2-digit
актуально только для лет, где 2-значный не учитывает столетие.2. @Barmar, тогда почему они доступны для
minute
иsecond
?3. Почему? Это заставляет его перестать выглядеть как время и приведет к путанице.
4. Понятия не имею, я думаю, что это просто согласованность для всех числовых полей.
Ответ №1:
Не знаю, зачем тебе это нужно, но эй.
Вы можете использовать formatToParts
и удалять начальный ноль из любого типа, который вы хотите:
const date = new Date('2/21/2021, 13:02:03')
const formatter = new Intl.DateTimeFormat(navigator.language, {
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
});
const dateString = formatter.formatToParts(date).map(({type, value}) => {
switch (type) {
case 'minute':
case 'second':
return value.replace(/^0/, '');
default:
return value;
}
}).join('');
console.log(dateString)