2017-04-24 3 views
0

Ich habe die folgenden JSON und ich muss die Monatsnamen in Zahlenformat konvertieren, so "November 2016" würde lesen "11-16" Trennung von Monat und Jahr mit einem Bindestrich und nur angezeigt die letzten 2 Ziffern des Jahres (in Javascript/Jquery). Wie könnte ich das bitte machen?Konvertieren von Monatstext in Monatsnummer in 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

entweder ein Array machen den Monat Strings in Ihrer Sprache enthält, oder diese Zeichenfolge auf ein Datum umwandeln und 'getMonth() + 1' verwenden – Shilly

+0

ist die Datum Array immer der erste? – Webeng

+0

Ja immer zuerst eins danke @Webeng – user1937021

Antwort

0

Wenn Sie jede Bibliothek nicht verwenden (wie moment.js) für Zeit Sie mit reinem js dazu brauchen.

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

Ich genoss die Verwendung von '.indexOf' hier :). Was den Betrieb des Moduls 1000 betrifft, funktioniert es gut, bis zu seinem 2100: P, aber immer noch gut. Ich habe nur die letzten Buchstaben der Saite genommen: 'year [2] + year [3]'. Meins würde funktionieren, bis es 10000 hahah ist, obwohl ... Modul 100 sollte besser funktionieren. Warum hast du nicht einfach% 100 gemacht? das macht es für alle zukünftigen Fälle funktionieren. – Webeng

+0

Auch Jahr ist eine Zeichenkette, also müssten Sie 'parseInt (Jahr)% 100' machen – Webeng

+0

@Webeng Dies ist nur ein Beispiel :). Nach 2099 können wir drei Ziffern für Jahre verwenden: D. – hurricane

0

Mit MomentJS könnten Sie so etwas tun:

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

Sie können Moment.js hier: http://momentjs.com/

seine sehr praktisch für Datum Manipulation.

0

Wenn Ihr Array data genannt wird, dann könnte man es wie folgt tun:

result
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]); 
}); 

und jetzt das Array enthält alle Werte wie folgt:

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

Ich weiß nicht, ob meine Ansatz ist richtig oder nicht, aber wir tun dies, Sie müssen jeden Index des Arrays, teilen Sie es mit Leerzeichen, und speichern Monat und Jahr in 2 Temperaturvariablen in jeder Iteration. Sobald Sie tempMonth und tempYear in Variablen verwenden unten liegt, um Monat in Anzahl und Jahr in 2 Ziffern zu erhalten.

tempMonth = 'November' 
tempYear = '2016' 

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

FinalVar = numMonth + "-" + numYear. 

Array mit dieser Logik erneut erstellen.

0

Wenn Ihr Array data genannt wird, dann könnte man einfach ausführen:

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

Ansatz mit Date.parse und Array # map().

Konvertiert zuerst Datumszeichenfolgen, um einen Tag im Format "2. November 2016" einzuschließen, um an Date Objekt zu übergeben. Verwenden zweiten Tag des Monats zu vermeiden, keine Zeitzone Fragen

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

Ich weiß nicht wer downvoted, aber ich gab eine Aufwertung für die Kreativität: P. Ändern Sie es in ein falsches Datum ("2,"), so dass "Date.parse" daran arbeitet, das war angenehm. – Webeng

0

dies funktionieren sollte

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