JavaScript中DD-MM-YYYY转DD MMM YYYY格式及内置实现方法咨询
实现DD MMM YYYY格式的日期显示(JavaScript内置方案)
嘿,你问到点子上了!JavaScript确实有内置的日期格式化方案,不用自己手动拼接字符串(还能避免你当前代码里可能踩的月份索引坑)。下面给你详细说两种可行的方式:
一、推荐:使用Intl.DateTimeFormat(现代JS原生API)
这是ES6+引入的国际化API,不仅能轻松生成DD MMM YYYY格式,还支持多语言本地化,非常靠谱。
针对你的场景,我们可以直接把它整合到你的jQuery循环里:
// 先定义格式化配置,指定我们要的格式 const dateFormatter = new Intl.DateTimeFormat('en-GB', { day: '2-digit', month: 'short', year: 'numeric' }); $('#timeTable th:not(:first-child)').each(function(){ if($(this).attr('Id') === 'totalHours') return; // 用内置格式化器直接生成目标格式的字符串 $(this).text(dateFormatter.format(dateObj)); dateObj.setDate(dateObj.getDate() + 1); });
这里'en-GB'保证月份缩写是英文的(比如Jan、Feb),配置项里:
day: '2-digit':两位数的日期(08、15)month: 'short':月份的缩写形式(Jan、Dec)year: 'numeric':四位年份(2018)
二、手动拼接方案(兼容旧环境)
如果需要兼容非常老的浏览器(不支持Intl API),可以手动定义月份缩写数组,然后拼接:
const monthAbbrs = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; $('#timeTable th:not(:first-child)').each(function(){ if($(this).attr('Id') === 'totalHours') return; // 注意:getMonth()返回0-11,所以要对应数组的索引 const day = String(dateObj.getDate()).padStart(2, '0'); const month = monthAbbrs[dateObj.getMonth()]; const year = dateObj.getFullYear(); $(this).text(`${day} ${month} ${year}`); dateObj.setDate(dateObj.getDate() + 1); });
⚠️ 这里要提醒你:你原来的代码里dateObj.getMonth()返回的是0(1月)到11(12月),直接拼接的话会显示0而不是Jan,这是个容易踩的坑,上面两种方案都帮你规避了这个问题。
内容的提问来源于stack exchange,提问作者user7962225
相关产品推荐
相关产品推荐

