You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置time.toLocaleString()生成无空格小写的12小时制时间?

问题:调整toLocaleString时间格式为无空格小写形式

我用这段原生JavaScript代码获取时间:

var time = new Date();
console.log( time.toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true }) );

得到的输出格式是8:33 PM,但我希望改成无空格且全小写的格式(比如8:33pm)。

目前我已经通过硬编码字符串处理的方式实现了需求:

var time = new Date();
var toLocale = time.toLocaleString('en-US', { hour: 'numeric', minute: 'numeric', hour12: true })
console.log(toLocale.replace(' ', '').toLowerCase());

但我想知道,能不能直接通过配置time.toLocaleString()的参数来完成这个格式调整?只使用原生JavaScript,不借助任何插件。


回答

嘿,这个问题问得很实在!遗憾的是,原生toLocaleString的配置参数里并没有直接控制AM/PM大小写或者移除空格的选项。

原因在于toLocaleString的设计初衷是遵循指定地区的本地化格式规范,对于英语(美国)地区来说,12小时制的默认格式就是带空格且AM/PM大写的,ECMAScript标准里并没有提供修改这些细节的配置项。

所以你现在用的replace+toLowerCase的方式,其实是原生JS里最直接高效的解决方案了——既简洁,又完全不需要依赖外部工具。如果非要追求“纯靠配置参数”实现,目前原生API还做不到这一点,只能通过字符串处理来调整格式。

不过如果你想要更灵活的时间格式控制,也可以试试手动拼接时间组件的方式,完全原生且能直接把控格式:

const time = new Date();
const hour = time.getHours();
const minute = time.getMinutes().toString().padStart(2, '0');
const period = hour >= 12 ? 'pm' : 'am';
const formattedTime = `${hour % 12 || 12}:${minute}${period}`;
console.log(formattedTime);

这种方式虽然代码量稍多一点,但能直接生成符合要求的格式,不需要后续的字符串替换操作。


内容的提问来源于stack exchange,提问作者Syed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:18:11