Uso javascript Date.prototype.toLocaleTimeString() (o equivalente: Intl.DateTimeFormat() )
Quiero una representación del tiempo (especialmente minutos y segundos ) SIN cero inicial (cuando min/seg es inferior a 10).
Ex. 13:2:3 o 1:2:3 PM p. m. (NO 13:02:03 o 1:02:03 PM p. m.)
Pero no puedo lograr esto:
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)Según MDN :
minuto
La representación del minuto. Los valores posibles son
"numeric","2-digit".segundo
La representación del segundo. Los valores posibles son
"numeric","2-digit".
NOTA: No quiero usar una biblioteca externa para esto.
No estoy seguro de por qué querrías hacer esto, pero oye.
Puede usar formatToParts y eliminar el cero inicial de cualquier tipo que desee:
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)