Da deine Werte jede Viertelstunde ermittelt werden und die zeitliche Differenz zwischen zwei Datenpunkten quasi immer identisch ist, könntest du als einfachsten Weg die Werte für die X-Achse direkt setzen.
Beim Instanziieren des Lineplots dürfen dann aber keine Werte für die X-Achse übergeben werden, da JpGraph dort kein Stringwerte erlaubt (und den Error 25070 generiert). Dort also nur das eine Array mit den Werten der Y-Achse übergeben.
Schöner ist natürlich der Ansatz mit dem Code von dbv. Dort wird ein Callback zur Ausgabe der Beschriftung für die X-Achse aufgerufen (Funktion TimeCallback()). Dazu müssen deine Zeitangaben in der DB aber in Integer konvertiert werden, um das Array mit den Daten der X-Achse korrekt zu füttern. SetTickLabels() wird dann nicht verwendet und bei new LinePlot() eben beide Arrays mit den Daten für Y- und X-Achse übergeben.
Dann entspricht die Skalierung der X-Achse auch den korrekten Datumswerten, was im oberen Fall mit SetTickLabels() natürlich nicht gegeben ist, wenn bei der Datenerfassung Lücken vorliegen.
Am sinnvollsten verwendet man in der DB nur ein Feld mit dem Datentyp DATETIME für Datum/Uhrzeit. Bei der Abfrage via SQL kann dann einfach via
der Feldinhalt in einen Zeitstempel (Sekunden seit 01.01.1970) konvertiert werden.
Mit folgenden SQL-Statements kannst du deine DB-Tabelle bearbeiten. Zunächst wird ein echtes Datumsfeld zugefügt, dann die Kombination deiner Datums- und Zeitwerte in die neue Spalte übernommen. Lege zuvor eine Sicherungskopie deiner Tabelle an.
ALTER TABLE `lux_log` ADD `zeit` DATETIME NOT NULL AFTER `uhrzeit`;
UPDATE `lux_log` SET `zeit` = CONCAT(`datum`, " ", `uhrzeit`)
Wenn die Werte in der neuen Spalte richtig gesetzt werden, kann du deinen Programmcode anpassen und Teile der Vorlage von dbv integrieren. Wenn alles klappt, musst du letztlich deine Datenerfassung modifzieren (Datumswerte in die neue Spalte übernehmen, lässt sich bequem mittels NOW() erreichen) und kannst die nicht mehr benötigten Spalten in der Tabelle entfernen.