2017-04-24 75 views
0

我有以下JSON,我需要将月份名称转换为数字格式,因此“2016年11月”将显示“11-16”,用短划线分隔月份和年份,只显示一年中的最后两位数字(使用Javascript/Jquery)。我怎么能这样做?将月份文本转换为JSON中的月份编号

[ 
    ["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] 
] 
+0

要么使包含月份字符串数组在你的语言,或将该字符串转换为日期并使用'getMonth()+ 1' – Shilly

+0

是日期数组总是第一个? – Webeng

+0

是总是第一个谢谢@Webeng – user1937021

回答

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

+0

我喜欢在这里使用'.indexOf' :)。关于模块1000的操作,运行良好,直到其2100:P,但仍然很好。我把这个字符串的最后一个字符看作是:'year [2] + year [3]'。我的工作会持续到10000年,但是......模块100应该更好。你为什么不做%100?这使它适用于所有未来的情况。 – Webeng

+0

另外一年是一个字符串,所以你将不得不''parseInt(year)%100' – Webeng

+0

@Webeng这只是一个例子:)。在2099年以后,我们可能会使用三位数字:D。 – hurricane

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/

其日期操作非常方便。

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"] 
0

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

tempMonth = 'November' 
tempYear = '2016' 

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

FinalVar = numMonth + "-" + numYear. 

与此逻辑再次创建阵列。

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]) 
0

方法使用Date.parse和阵列#地图()。

首先将日期字符串转换为格式为“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)

+0

我不知道谁低估了,但我对创造力赞不绝口:P。将它改为假日期('2,''),这样'Date.parse'就可以工作,这很有意思。 – Webeng

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);