JavaScript数字转月份名称:forEach循环数据转换问题
解决JavaScript中月份数字转名称的问题
这问题其实很常见,给你两个实用的解决方案,看你的需求场景来选:
方案1:手动定义月份名称数组(简单直接)
如果你只需要固定的中文月份名称,手动创建对应数组是最直接的方式——不用依赖API,性能也高:
// 定义月份名称数组,索引1对应一月,索引12对应十二月 const monthNames = ['', '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']; const months = []; const revenue = []; const label = [ {month: 9, revenue: 400}, {month: 11, revenue: 500}, {month: 12, revenue: 600} ]; label.forEach(function(value){ // 用数组索引获取对应月份名称 months.push(monthNames[value['month']]); revenue.push(value['revenue']); }); console.log(months); // 输出: ["九月", "十一月", "十二月"]
方案2:使用Intl.DateTimeFormat(本地化友好)
如果需要支持多语言(比如切换英文、繁体),或者不想手动维护数组,推荐用浏览器内置的Intl.DateTimeFormatAPI,它能自动生成符合本地化规则的月份名称:
// 封装一个获取月份名称的函数 function getLocalizedMonthName(monthNumber, locale = 'zh-CN') { // Date对象的月份是0-11,所以要把传入的1-12转成0-11 const date = new Date(); date.setMonth(monthNumber - 1); // 配置参数:month: 'long'表示全称,'short'是缩写(比如"九月"→"九") return new Intl.DateTimeFormat(locale, { month: 'long' }).format(date); } const months = []; const revenue = []; const label = [ {month: 9, revenue: 400}, {month: 11, revenue: 500}, {month: 12, revenue: 600} ]; label.forEach(function(value){ // 调用函数获取月份名称 months.push(getLocalizedMonthName(value['month'])); revenue.push(value['revenue']); }); console.log(months); // 输出: ["九月", "十一月", "十二月"] // 如果需要英文,只需要传第二个参数:getLocalizedMonthName(value['month'], 'en-US') // 会输出: ["September", "November", "December"]
小提示
- 方案1里的数组也可以调整成索引0对应一月,这时取值要改成
monthNames[value['month'] - 1],看你个人习惯就好 - 方案2一定要注意
Date对象的月份是0起始的,必须把传入的数字减1,否则会拿到错误的月份名称(比如传入9会得到十月)
内容的提问来源于stack exchange,提问作者peaceduck
相关产品推荐
相关产品推荐

