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

JS中如何获取以短横线“-”分隔的当前日期时间字符串?

问题根因

toLocaleDateString()、toLocaleTimeString()属于本地化接口,输出格式完全受运行环境的系统语言、区域配置、运行时版本影响,分隔符、字段顺序都没有统一标准,靠逐个替换特殊字符的方式做兼容非常容易漏匹配。你遇到的下划线未替换问题,本质是当前环境输出的时间字段分隔符没有被你写的替换规则覆盖,这种实现方式稳定性极差,不适合用来生成规范文件名。

最优实现方案

不要依赖本地化字符串接口,直接读取Date实例的年、月、日、时、分、秒字段手动拼接,格式完全可控,不会出现意外的非法字符:

const now = new Date();
// 数字补零,保证分、秒字段为两位数
const padZero = num => num.toString().padStart(2, '0');

// 拼接日期部分
const dateStr = `${now.getMonth() + 1}-${now.getDate()}-${now.getFullYear()}`;

// 处理12小时制及时段
const period = now.getHours() >= 12 ? 'PM' : 'AM';
const hour12 = now.getHours() % 12 || 12;
const timeStr = `${hour12}-${padZero(now.getMinutes())}-${padZero(now.getSeconds())}-${period}`;

const dateTime = `${dateStr}-${timeStr}`;
console.log(dateTime);

运行后输出格式完全匹配你的预期:6-24-2022-3-33-17-PM,且不受任何环境配置影响。

如果需要单行实现,可以用IIFE简写:

const dateTime = ((d,pad)=>`${d.getMonth()+1}-${d.getDate()}-${d.getFullYear()}-${d.getHours()%12||12}-${pad(d.getMinutes())}-${pad(d.getSeconds())}-${d.getHours()>=12?'PM':'AM'}`)(new Date(), n=>n.toString().padStart(2,'0'));

内容的提问来源于stack exchange,提问作者code-8

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:09:14