如何格式化从年份monthno(2019-1)到月份年份(2019-1)的javascript日期字符串

如何格式化从年份monthno(2019-1)到月份年份(2019-1)的javascript日期字符串,javascript,Javascript,我有一些json数据,其中我得到的billdates为2018-9和2017-9我想将它们转换为2018-9到2018年9月和2017-9到2017年9月 类似地,一月、二月、三月、五月等所有月份 我在谷歌上搜索了很多,但直到现在才找到任何东西,我只找到了如何将2018年8月1日转换为2018年8月1日 所以,请各位指导我,我如何才能做到这一点 我已经根据json数据呈现了一个HTML表,我正在注释我使用BillDate的行 const输入=[ [“年度”、“2018-9年”、“2017-

我有一些json数据,其中我得到的billdates为
2018-9
2017-9
我想将它们转换为
2018-9
到2018年9月和
2017-9
到2017年9月

类似地,一月、二月、三月、五月等所有月份

我在谷歌上搜索了很多,但直到现在才找到任何东西,我只找到了如何将2018年8月1日转换为2018年8月1日

  • 所以,请各位指导我,我如何才能做到这一点
我已经根据json数据呈现了一个HTML表,我正在注释我使用BillDate的行

const输入=[
[“年度”、“2018-9年”、“2017-9年”],
[“JAYANAGAR”,“2018-9”,857],
[“MALLESHWARAM”,“2018-9”,169],
[“科拉尔”,“2018-9”,178],
[“JAYANAGAR”,“2017-9”,635],
[“MALLESHWARAM”,“2017-9”,56],
[“科拉尔”,“2017-9”,90]
]
const merged=input.reduce((acc,arr)=>{
const[城市、年份、价值]=arr;
如果(城市==“年”)
acc[城市]=arr
否则{
acc[城市]=acc[城市]
acc[城市].推送(值)
}
返回acc;
}, {})
常量输出=对象值(合并)
console.log(输出)

您可以使用
regex
解析日期字符串,然后从数字中提取月份以格式化为字符串。 例如:

var str=“2018-5”;
var parts=str.match(/^(\d{1,4})-(\d{1,2})$/);
控制台日志(部分);//["2018-5", "2018", "5"]
//例如,如何将数字与月份匹配
变量月份={“1”:“1月”、“2”:“Fev”、“3”:“3月”、“4”:“4月”、“5”:“Mai”}
风险值日期=月[部分[2]+“-”+部分[1]/“Mai-2018”

console.log(日期)
您可以构造一个新的日期:

const date=新日期(yourStringFromApi)

并从
到LocaleString
获得命名月份:

const yourString=date.tolocalString('en-us',{year:'numeric',month:'short'});//2019年3月

或您的格式:


const yourString=date.tolocalString('en-us',{month:'short'})+'-'+date.tolocalString('en-us',{year:'numeric'})//2019年3月

您可以使用
toutstring()
来获取月份的名称,使用split进行小字符串操作,就可以获取月份的名称

var数据=[{
“金额”:8578579,
“账单日期”:“2018-9”,
“出口”:“JAYANAGAR”
},
{
“金额”:1693429,
“账单日期”:“2018-9”,
“出口”:“MALLESHWARAM”
},
{
“金额”:1782162,
“账单日期”:“2018-9”,
“出口”:“科拉尔”
},
{
“金额”:635,
“账单日期”:“2017-9”,
“出口”:“JAYANAGAR”
},
{
“金额”:56,
“账单日期”:“2017-9”,
“出口”:“MALLESHWARAM”
},
{
“金额”:90,
“账单日期”:“2017-9”,
“出口”:“科拉尔”
}
]
data.forEach(e=>{
var a=新日期(如billdate);
a、 setMonth(a.getMonth()+1);
a=a.toutString();
var c=分割(“”);
e、 billdate=c[2]+“”+c[3];
})
让formatData=函数(数据){
让billdates=[];
让出口=[];
data.forEach(元素=>{
if(billdates.indexOf(element.billdate)=-1){
推送(element.billdate);
}
if(出口指数)(元件出口)=-1){
插座。推动(元件。插座);
}
});
返回{
数据:数据,
billdates:billdates,
出口:出口,
};
};
让renderTable=函数(数据){
billdates=data.billdates;
出口=数据出口;
data=data.data;
设tbl=document.getElementById(“tblYoY”);
让table=document.createElement(“table”);
设thead=document.createElement(“thead”);
让headerRow=document.createElement(“tr”);
设th=document.createElement(“th”);
th.innerHTML=“日期”;
添加(“文本中心”);
头颅附属器(th);
头颅附属器(th);
billdates.forEach(元素=>{
th=document.createElement(“th”);
th.innerHTML=element;//这个像2018-9一样填充billdate
添加(“文本中心”);
头颅附属器(th);
});
附肢儿童(头颅);
headerRow.insertBefore(th,headerRow.children[1]);
附肢儿童(头颅);
表1.儿童(thead);
让tbody=document.createElement(“tbody”);
outlets.forEach(元素=>{
让row=document.createElement(“tr”);
td=document.createElement(“td”);
td.innerHTML=元素;
世界其他地区(td);
billdates.forEach(billdate=>{
设el=0;
data.forEach(d=>{
if(d.outlet==元素和&d.billdate==billdate){
el=d.金额;
}
//控制台日志(el)
});
td=document.createElement(“td”);
td.innerHTML=el.tolocalString('en-in');
td.classList.add(“文本右侧”);
世界其他地区(td);
});
行插入前(td,行子项[1]);
tbody.appendChild(世界其他地区);
});
表3.儿童(t身体);
tbl.innerHTML=“”;
tbl.附件(表);
表.classList.add(“表”);
table.classList.add(“带条纹的表”);
table.classList.add(“带边框的表”);
table.classList.add(“表悬停”);
}
设FormattedData=FormattData(数据);
可渲染(格式化数据)

您可以尝试使用moment.js,如下所示:

let date=time.utc(“2018-11”、“YYYY-M”)。格式(“MMM-YYYY”);
控制台日志(日期)
尝试使用

moment(a.billdate,'YYYY-MM')。格式('MMM-yyy')

var数据=[{“金额”:8578579,“营业点”:“2018-9”,“营业点”:“JAYANAGAR”},{“金额”:1693429,“营业点”:“2018-9”,“营业点”:“MALLESHWARAM”},{“金额”:1782162,“营业点”:“KOLAR”},{“金额”:635,“营业点”:“JAYANAGAR”},{“金额”:56,“营业点”:“2017-9”,“营业点”:“MALLESHWARAM”},{“金额”:90,“账单日期”:“2017-9”,“网点”:“科拉尔”}];
data.forEach(a=>a.billdate=moment(a.billdate,'YYYY-MM')。格式('MMM-yyy'))
让formatData=函数(数据){
让billdates=[];
让出口=[];
data.forEach(元素=>{
如果(账单日期)