我使用javascriptDate.prototype.toLocaleTimeString()(或等价地:Intl.DateTimeFormat()))
我想要一个时间的表示(特别是minute)和第二)无前导零(当min/sec小于10时)
交货。13:2:3
或1:2:3 PM
(NOT13: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"
.
注意:我不想使用外部库,对于这个
不知道为什么要这样做,但是,嘿。
您可以使用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)