如何用jQuery/JavaScript将指定日期格式转换为带时分秒的格式?
解决日期格式转换问题(无需截取字符串)
嘿,刚好我之前也碰到过类似的需求,不用非得去截取new Date()的字符串结果啦,给你几个更可靠、更标准的方法:
方法一:原生JavaScript手动拼接(最灵活)
利用Date对象的原生方法获取各个时间部分,手动补零后拼接成目标格式,完全可控:
function formatTargetDate(isoString) { const date = new Date(isoString); // 获取各个时间分量,注意月份是从0开始的,要加1 const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); const seconds = String(date.getSeconds()).padStart(2, '0'); // 拼接成目标格式,毫秒固定为.00 return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.00`; } // 测试你的示例日期 console.log(formatTargetDate("2018-05-17T00:55:46")); // 输出:2018-05-17 00:55:46.00
这个方法的好处是完全不依赖字符串截取,避免了不同环境下Date.toString()输出格式不一致的问题,而且可以根据需要随时调整格式。
方法二:处理UTC时间(如果原日期是UTC时区)
如果你的原ISO字符串是UTC时间,不想被本地时区影响,可以改用getUTC*系列方法:
function formatUTCTargetDate(isoString) { const date = new Date(isoString); const year = date.getUTCFullYear(); const month = String(date.getUTCMonth() + 1).padStart(2, '0'); const day = String(date.getUTCDate()).padStart(2, '0'); const hours = String(date.getUTCHours()).padStart(2, '0'); const minutes = String(date.getUTCMinutes()).padStart(2, '0'); const seconds = String(date.getUTCSeconds()).padStart(2, '0'); return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.00`; }
方法三:用Intl.DateTimeFormat(更简洁)
ES6引入的Intl.DateTimeFormat是专门做国际化时间格式化的API,兼容性很好,不用手动补零:
function formatDateWithIntl(isoString) { const date = new Date(isoString); // 格式化日期部分(年-月-日) const dateFormatter = new Intl.DateTimeFormat('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' }); // 把默认的/替换成- const datePart = dateFormatter.format(date).replace(/\//g, '-'); // 格式化时间部分(时:分:秒),24小时制 const timeFormatter = new Intl.DateTimeFormat('zh-CN', { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false }); const timePart = timeFormatter.format(date); // 拼接最终格式 return `${datePart} ${timePart}.00`; }
总结
这几种方法都比截取字符串更可靠,因为字符串截取完全依赖Date对象的字符串输出格式,不同浏览器或环境可能会有差异;而用原生方法或Intl API是遵循标准的,兼容性和稳定性更好。
内容的提问来源于stack exchange,提问作者Kurkula
相关产品推荐
相关产品推荐

