将月份文本转换为JSON中的月份编号

时间:2017-04-24 12:18:39

标签: javascript jquery

我有以下JSON,我需要将月份名称转换为数字格式,因此“2016年11月”会显示“11-16”,用月份分隔月份和年份,仅显示当年的最后2位数字(在Javascript / Jquery)。我怎么能这样做?

reject

7 个答案:

答案 0 :(得分:0)

如果您没有使用任何库(例如moment.js) 时间 ,您需要使用纯js。

var monthNames = [ "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December" ];
var str = "January 2016";
var arr = str.split(' ');
var month = arr[0];
var year = arr[1];
var newMonth = monthNames.indexOf(month) + 1 ;
var newYear = year % 1000;
if(newMonth<10){
    newMonth = "0" + newMonth
}
alert (newMonth + " - " + newYear);

EX Fiddle

答案 1 :(得分:0)

使用MomentJS你可以这样做:

var array = [
    ["November 2016", "December 2016", "January 2017", "February 2017", "March 2017"],
    ["total", 2, 43, 59, 51, 41],
    ["mammo", 1, 20, 33, 12, 12],
    ["face", 1, 20, 16, 30, 27],
    ["body", 0, 3, 10, 9, 2],
    ["photo", 0, 19, 27, 12, 5],
    ["scan", 2, 24, 32, 39, 36]
]

for(var i = 0; i < array[0].length; i++)
{
    array[0][i] = moment(array[0][i]).format('MM, YY');
}

您可以在此处获取Moment.js:http://momentjs.com/

它非常方便日期操作。

答案 2 :(得分:0)

如果你的数组被称为data,那么你可以按如下方式进行:

var result = [];
data[0].forEach(function(myString){
    var info = myString.split(" ");
    var month = info[0];
    var year = info[1];
    var mresult;
    switch(month) {
        case "January" : { mresult = 1;  }  break;
        case "February" : { mresult = 2;  }  break;
        case "March" : { mresult = 3;  }  break;
        case "April" : { mresult = 4;  }  break;
        case "May" : { mresult = 5;  }  break;
        case "June" : { mresult = 6;  }  break;
        case "July" : { mresult = 7;  }  break;
        case "August" : { mresult = 8;  }  break;
        case "September" : { mresult = 9;  }  break;
        case "October" : { mresult = 10;  }  break;
        case "November" : { mresult = 11;  }  break;
        case "December" : { mresult = 12;  }  break;   
    }
    result.push(mresult + "-" + year[2] + year[3]);
});

现在数组result包含所有值,如下所示:

["11-16", "12-16", "1-17", "2-17", "3-17"]

答案 3 :(得分:0)

我不知道我的方法是否正确但我们这样做, 您需要获取数组的每个索引,将其与空间分开,并在每次迭代中将月份和年份存储在2个临时变量中。 一旦你有变量中的tempMonth和tempYear,使用下面的谎言来获得数字和年份的月份数字。

tempMonth = 'November'
tempYear = '2016'

numMonth = moment ().month(tempMonth).format ('M');
numYear = moment ().year(tempYear).format ('YY');

FinalVar = numMonth + "-" + numYear.

使用此逻辑再次创建数组。

答案 4 :(得分:0)

如果你的数组被称为data,那么你可以执行:

function convert(monthList) {
  monthList.forEach(function (element) {
    var myDate = new Date(element.split(" ")[0] + " 1, 2000");
    var monthDigit = myDate.getMonth() + 1;
    console.log(monthDigit+"-"+element.split(" ")[1].substring(2,4))
  }, this);
}


convert(data[0])

答案 5 :(得分:0)

使用Date.parse和Array#map()的方法。

首先将日期字符串转换为包含格式为“2016年11月2日”的日期,以便传递给Date对象。使用月中的第二天来避免任何时区问题

var arr = [["November 2016", "December 2016", "January 2017", "February 2017", "March 2017"],
["total", 2, 43, 59, 51, 41],
["mammo", 1, 20, 33, 12, 12],
["face", 1, 20, 16, 30, 27],
["body", 0, 3, 10, 9, 2],
["photo", 0, 19, 27, 12, 5],
["scan", 2, 24, 32, 39, 36]];

arr[0] = arr[0].map(function(str){  
   var d = new Date(Date.parse(str.replace(' ', ' 2,')));
   return [d.getMonth()+1 ,String(d.getFullYear()).slice(2)].join('-')
});

console.log(arr)

答案 6 :(得分:0)

这应该有效

var array = ["November 2016","December 2016","January 2017","February 2017","March 2017"];
for(var i=0;i<array.length;i++){
  var str = "1 "+array[i];
  var date = new Date(str);
  var month  = date.getMonth()+1;
  var year = date.getFullYear()+"";
  array[i] = month +"-"+year.substring(2);
}
console.log(array);