2017-05-15 2 views
0

konvertieren habe den folgenden Code:Wie eine Zeichenfolge in einem Datumsfeld in jquery Ich

//var data is an array of objects 
var dateRegex = /(\d{4})-(\d{2})-(\d{2})T(\d{2})\:(\d{2})\:(\d{2})/; 
var dataDateFields = []; 
$.each(data[0], function (name, value) { 
    if (jQuery.type(value) === "string") { 
     if (value.match(dateRegex)) { 
      dataDateFields.push(name); 
     } 
    } 
}); 
if (dataDateFields.length > 0) { 
    $.each(data, function (e) { 
     $.each(this, function(name, value) { 
      if (jQuery.inArray(name, dataDateFields) !== -1) { 
       var tempDate = new Date(value); 
       this.value = tempDate; 
      } 
     }); 
    }); 
} 

dieser Code Was tut, ist es Daten durch es wird, die in einem Array von Objekten aus einer Tabelle db. Anschließend durchsucht es die Felder des ersten Objekts und ruft den Namen der Spalte (n) ab, die Daten enthalten, die wie ein Datetime-Feld aussehen. Es speichert den Namen dieser Felder in einem Array. Anschließend wird jede Zeile in den Daten durchlaufen, und jede Spalte mit einem Datetime-Feldnamen konvertiert diese Daten von einer Zeichenfolge in einen Date-Typ.

Das Problem, das ich habe, ist der letzte Teil des Codes. Das Stück Code:

if (jQuery.inArray(name, dataDateFields) !== -1) { 
      var tempDate = new Date(value); 
      this.value = tempDate; 
     } 

Der Code gibt die if-Anweisung, es korrekt ausgefüllt tempDate mit einer Datumsvariablen von der mitgelieferten String. Ich würde dann denken, dass

this.value = tempDate; 

würde dann überschreiben die zuvor gespeicherte Datetime-Zeichenfolge mit dem neuen Datum. Aber das tut es nicht. Wenn ich mir die Daten anschaue, nachdem alles durchgeschleift wurde, sind die Felder, die datetime strings haben, immer noch dieselben, sie haben diese Felder nicht mit den konvertierten Date-Daten gefüllt. ps. tempDate, wenn aktiviert, wird immer korrekt in einen Date-Typ und in das richtige Format konvertiert.

Hat jemand eine Idee, wie ich das erreichen kann? Gibt es auch einen einfacheren Weg, um das zu tun, was ich mache? Dieser Code geht von der Annahme aus, dass ich nicht weiß, welche Daten an mich weitergegeben werden oder welche Felder er enthalten wird - ich weiß nur, dass er im String-Format Datetime-Felder enthalten kann, damit später Berechnungen durchgeführt werden können Ich muss jedes Feld überprüfen, sehen, ob es wie ein Datum aussieht, und dann alle Zeichenfolgen mit dem Namen dieses Felds in Datumstypen konvertieren.

+4

JavaScript-Daten sind ... Nicht ideal. Erwägen Sie, eine Bibliothek wie [MomentJS] (https://momentjs.com/docs/#/parsing/) zu verwenden. – Laoujin

+0

Mögliches Duplikat von [Zeichenfolge in Datum in js konvertieren] (http://stackoverflow.com/questions/5619202/converting -string-to-date-in-js) – Liam

+0

Warum verwenden Sie 'this.value' in' $ .each() '? – guest271314

Antwort

0

es herausgefunden:

$.each(data[0], function (name, value) { 
    if (jQuery.type(value) === "string") { 
     if (value.match(dateRegex)) { 
      dataDateFields.push(name); 
     } 
    } 
}); 
if (dataDateFields.length > 0) { 
    for (var i = 0; i < data.length; i++) { 
     $.each(data[i], function (name, value) { 
      if (jQuery.inArray(name, dataDateFields) !== -1) { 
       var date = value.split("T"); 
       date = date[0]; 
       date = date.split("-"); 
       var year = date[0]; 
       var month = date[1]; 
       var day = date[2]; 
       var tempDate = new Date(year, month, day); 
       eval("data[i]."+name+" = tempDate;"); 
      } 
     }); 
    } 
} 

ein anstelle eines foreach for-Schleife benötigt.

Verwandte Themen