2017-04-24 76 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);