Google Chart zeichnet Trendlinien mit Datum auf der x-Achse

Lesezeit: 3 Minuten

Google Chart zeichnet Trendlinien mit Datum auf der x Achse
Roberto Remondini

Ich muss ein Google-Liniendiagramm mit Trendlinien zeichnen, aber ich verwende eine Ajax-Anfrage, um Daten zum Einfügen zu erhalten

In der Ajax-Datei füge ich die Elemente der Grafik in ein Array ein und konvertiere sie dann so in JSON:

$reply= json_encode($array);
echo $reply;

Dies ist der Inhalt meiner Ajax-Antwort:

reply = [
    ["Periodo","Rome","Milan","Test"],
    ["20160830",1,2,3],
    ["20160831",2,3,6],
    ["20160901",2,3,20],
    ["20160902",20,30,12]
  ];

In meinem Programm befülle ich die Grafik so:

var replyJSON = JSON.parse(reply);
var data = google.visualization.arrayToDataTable(replyJSON);

Dies ist ein ähnliches Beispiel dafür, was ich habe und was ich tun würde, aber hier kann ich den Ajax-Aufruf nicht replizieren: http://jsfiddle.net/roby492/srrrn9sa/384/

Ich muss eine JSON-Antwort erhalten und die Datumszeichenfolge in jquery date konvertieren, um die Trendlinien korrekt anzuzeigen.

Wie kann ich das machen? Oder wie kann ich den JSON mit Datum anstelle einer Zeichenfolge per Ajax senden?

Danke schön. Roberto R.

Google Chart zeichnet Trendlinien mit Datum auf der x Achse
Weißer Hut

Werfen Sie einen Blick auf dieses PHP-zu-Google-Diagramm über ein Ajax-Beispiel

empfehlen hier ein ähnliches Setup

Das Beispiel erstellt JSON, das von Google akzeptiert wird

was die Erstellung von ermöglicht DataTable, direkt aus dem JSON

Das Folgende ist ein Ausschnitt aus dieser Antwort, der den JSON erstellt

$rows = array();
$table = array();

$table['cols'] = array(
    array('label' => 'Time', 'type' => 'string'),
    array('label' => 'Wind_Speed', 'type' => 'number'),
    array('label' => 'Wind_Gust', 'type' => 'number')
);

while ($row = mysql_fetch_assoc($sqlResult)) {
  $temp = array();
  $temp[] = array('v' => (string) $row['Time']);
  $temp[] = array('v' => (float) $row['Wind_Speed']);
  $temp[] = array('v' => (float) $row['Wind_Gust']);
  $rows[] = array('c' => $temp);
}

$table['rows'] = $rows;

echo json_encode($table);

eine tatsächliche Datumsspalte im JSON zu verwenden, wird ein wenig schwierig

hauptsächlich, weil Monatszahlen in JavaScript im Gegensatz zu PHP nullbasiert sind

Wenn Sie also ein Datum in PHP formatieren, müssen Sie die Monatszahl um 1 reduzieren

was zu einer langen Formatanweisung führt

Um ein Datum in JSON zu übergeben, können Sie das folgende Format verwenden, beachten Sie, dass es als Zeichenfolge übergeben wird …

"Date(2016, 8, 28, 15, 34, 40)" –> was dem heutigen Datum entspricht
wieder ist der Monat nullbasiert (8 = September)

Um also ein Datum in diesem Format in PHP zu erstellen, können Sie Folgendes verwenden …

$date1 = new DateTime();
$date2 = "Date(".date_format($date1, 'Y').", ".((int) date_format($date1, 'm') - 1).", ".date_format($date1, 'd').", ".date_format($date1, 'H').", ".date_format($date1, 'i').", ".date_format($date1, 's').")";

das produziert die "Date(...)" oben gezeigt

Wenn Sie das Snippet aus der anderen Antwort so anpassen, dass es eine Datumsspalte enthält, könnte es ungefähr so ​​​​aussehen …

$rows = array();
$table = array();

$table['cols'] = array(
    array('label' => 'Date', 'type' => 'date'),
    array('label' => 'Wind_Speed', 'type' => 'number'),
    array('label' => 'Wind_Gust', 'type' => 'number')
);

while ($row = mysql_fetch_assoc($sqlResult)) {
  $date1 = $row['Date'];
  $date2 = "Date(".date_format($date1, 'Y').", ".((int) date_format($date1, 'm') - 1).", ".date_format($date1, 'd').", ".date_format($date1, 'H').", ".date_format($date1, 'i').", ".date_format($date1, 's').")";

  $temp = array();
  $temp[] = array('v' => (string) $date2);
  $temp[] = array('v' => (float) $row['Wind_Speed']);
  $temp[] = array('v' => (float) $row['Wind_Gust']);
  $rows[] = array('c' => $temp);
}

$table['rows'] = $rows;

echo json_encode($table);

Wenn Sie die obigen Ergebnisse über Ajax aus PHP erhalten, können Sie die Tabelle direkt erstellen

var data = new google.visualization.DataTable(reply);

keine Notwendigkeit, den JSON zu analysieren oder zu verwenden arrayToDataTable

  • Das funktioniert gut, aber ich musste dieses Mal auf andere Weise lösen: Fügen Sie das Datum wie folgt in den JSON ein “/date(timestamp in ms)/” und parsen Sie es mit einer Funktion, um die Zeichenfolge in ein Datumsobjekt zu konvertieren.

    – Roberto Remondini

    30. September 16 um 08:03 Uhr


  • Danke für das Codebeispiel! date_create() war in meinem Fall nützlich: $date1 = date_create($row[‘Date’])

    – AntonK

    16. August 17 um 5:45 Uhr

.

784550cookie-checkGoogle Chart zeichnet Trendlinien mit Datum auf der x-Achse

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy