为什么toLocaleTimeString()总是零位分和秒



我使用javascriptDate.prototype.toLocaleTimeString()(或等价地:Intl.DateTimeFormat()))


我想要一个时间的表示(特别是minute)和第二)无前导零(当min/sec小于10时)

交货。13:2:31:2:3 PM(NOT13:02:031: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".


注意:我不想使用外部库,对于这个

不知道为什么要这样做,但是,嘿。

您可以使用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)

相关内容

  • 没有找到相关文章

最新更新