为啥 toLocaleTimeString(),总是零填充分钟和秒
Posted
技术标签:
【中文标题】为啥 toLocaleTimeString(),总是零填充分钟和秒【英文标题】:Why toLocaleTimeString(), always zero-pad minute and second为什么 toLocaleTimeString(),总是零填充分钟和秒 【发布时间】:2021-12-07 11:08:48 【问题描述】:我使用 javascript Date.prototype.toLocaleTimeString()(或等效:Intl.DateTimeFormat())
我想要时间的表示(尤其是 分 和 秒)没有前导零(当 min/sec 小于 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"
。
注意:我不想为此使用外部库。
【问题讨论】:
我认为numeric
和2-digit
之间的区别仅与年份相关,其中2 位数字代表世纪。
@Barmar,那为什么minute
和second
可以使用它们?
为什么?这使它看起来不再像时间,并且会引起混乱。
不知道,我认为这只是所有数字字段的一致性。
【参考方案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)
【讨论】:
以上是关于为啥 toLocaleTimeString(),总是零填充分钟和秒的主要内容,如果未能解决你的问题,请参考以下文章
如何在不显示秒数的情况下使用 .toLocaleTimeString()?