Datum farbig darstellen
am 05.08.2005 22:25:04 von Klaus FEIMER
Hallo,
in einer mysql DB werden Datumseinträge erfaßt, die mit folgendem Befehl
ausgelesen werden:
DATE_FORMAT(date, '%d.%m.%Y %H:%i') AS datum
Nun möchte ich die verschiedenen Beiträge in einer Tabelle nach Datum
mit einer anderen Hintergrundfarbe für jeden Tag darstellen mit Hilfe
folgendem Code:
if((substr(mysql_result($erg,$n,"datum"),0,6)) == date("d.m.")){
$bgcolor = "#FFFF00"; } //gelb
if((substr(mysql_result($erg,$n,"datum"),0,6)) == date("d.m.")-1){
$bgcolor = "#C0C0C0"; } //silber
if((substr(mysql_result($erg,$n,"datum"),0,6)) == date("d.m.")-2){
$bgcolor = "#FF0000"; } //rot
if((substr(mysql_result($erg,$n,"datum"),0,6)) == date("d.m.")-3){
$bgcolor = "#00FFFF"; } //blau
etc.
Soweit kein Problem, nur beim Datumswechsel wird mir immer die gleiche
Farbe angezeigt, wie beim ersten Tag des neuen Monats. D.h. die Farbe,
die am 1. August angezeigt wird, wird auch am 31., 30., 29. Juli etc.
angezeigt. Hat mir jemand eine Idee, wie ich dies richtig programmieren
kann, damit jeder Tag in einer anderen Hintergrundfarbe dargestellt wird?
Danke und Gruß
Klaus
Re: Datum farbig darstellen
am 05.08.2005 23:33:00 von Martin Kurz
Hallo Klaus,
> if((substr(mysql_result($erg,$n,"datum"),0,6)) == date("d.m.")){
> $bgcolor = "#FFFF00"; } //gelb
> [...]
>
> Soweit kein Problem, nur beim Datumswechsel wird mir immer die gleiche
> Farbe angezeigt, wie beim ersten Tag des neuen Monats. D.h. die Farbe,
> die am 1. August angezeigt wird, wird auch am 31., 30., 29. Juli etc.
> angezeigt. Hat mir jemand eine Idee, wie ich dies richtig programmieren
> kann, damit jeder Tag in einer anderen Hintergrundfarbe dargestellt wird?
Erstmal zur Klarstellung: Jeder Tag soll eine feste, zuvor definierte Farbe
bekommen, dh Du definierst über jewielige date-Vergleiche mit dem Ergebnis der
DB-Abfrage zig Hintergrundfarben und das klappt nicht so ganz? Irgendwie
erscheint mie das extrem umständlich. Wäre es nicht einfacher, im Template
einfach einen Farbpool wechseln zu lassen?
Oder falls Du nicht mit Templates arbeitest, vermute ich mal, dass die
Ergebnisse in einer Schleife zur Tabelle zusammengebaut werden? Dann kannst Du
doch auch einfach bspw nacheinander aus einem zuvor definierten Array mit
Hintergrundfarben die Tabelle einzufärben.
Oder ist es extrem wichtig, dass das heutige Datum eine vorgegebene Farbe hat?
(Wobei zu viele unterschiedliche Farben das Verständnis auch nicht unbedingt
erleichtern) Dann wäre es aber auch besser, if () {...} elseif () {...}... zu
verwenden, da Du sonst für jeden Datensatz jede If-Bedingung prüfst - recht
ineffizient.
Viele Grüße,
Martin
Re: Datum farbig darstellen
am 06.08.2005 17:41:59 von Klaus FEIMER
Martin Kurz schrieb:
> Hallo Klaus,
>
>
>>if((substr(mysql_result($erg,$n,"datum"),0,6)) == date("d.m.")){
>>$bgcolor = "#FFFF00"; } //gelb
>>[...]
>>
>>Soweit kein Problem, nur beim Datumswechsel wird mir immer die gleiche
>>Farbe angezeigt, wie beim ersten Tag des neuen Monats. D.h. die Farbe,
>>die am 1. August angezeigt wird, wird auch am 31., 30., 29. Juli etc.
>>angezeigt. Hat mir jemand eine Idee, wie ich dies richtig programmieren
>>kann, damit jeder Tag in einer anderen Hintergrundfarbe dargestellt wird?
>
>
> Erstmal zur Klarstellung: Jeder Tag soll eine feste, zuvor definierte Farbe
> bekommen, dh Du definierst über jewielige date-Vergleiche mit dem Ergebnis der
> DB-Abfrage zig Hintergrundfarben und das klappt nicht so ganz? Irgendwie
> erscheint mie das extrem umständlich. Wäre es nicht einfacher, im Template
> einfach einen Farbpool wechseln zu lassen?
>
> Oder falls Du nicht mit Templates arbeitest, vermute ich mal, dass die
> Ergebnisse in einer Schleife zur Tabelle zusammengebaut werden? Dann kannst Du
> doch auch einfach bspw nacheinander aus einem zuvor definierten Array mit
> Hintergrundfarben die Tabelle einzufärben.
>
> Oder ist es extrem wichtig, dass das heutige Datum eine vorgegebene Farbe hat?
> (Wobei zu viele unterschiedliche Farben das Verständnis auch nicht unbedingt
> erleichtern) Dann wäre es aber auch besser, if () {...} elseif () {...}... zu
> verwenden, da Du sonst für jeden Datensatz jede If-Bedingung prüfst - recht
> ineffizient.
das meine Vorgehensweise vielleicht nicht optimal ist, mag sein, aber
eigentlich wollte ich nur wissen, warum beim Monatswechsel keine andere
Farbe angezeigt wird? Beim if () ... elseif () ist es geanu dasselbe, es
wird beim Monatswechsel keine andere Farbe angezeigt. Vielleicht kann
mir jemand helfen, was an meinem Vergleich
if((substr(mysql_result($erg,$n,"datum"),0,6)) == date("d.m.")-1){
$bgcolor = "#C0C0C0"; } //silber
falsch läuft, wenn der Monat wechselt?
Klaus
Re: Datum farbig darstellen
am 06.08.2005 18:06:50 von Niels Braczek
Klaus Feimer schrieb:
> das meine Vorgehensweise vielleicht nicht optimal ist, mag sein, aber
> eigentlich wollte ich nur wissen, warum beim Monatswechsel keine andere
> Farbe angezeigt wird? Beim if () ... elseif () ist es geanu dasselbe, es
> wird beim Monatswechsel keine andere Farbe angezeigt. Vielleicht kann
> mir jemand helfen, was an meinem Vergleich
> if((substr(mysql_result($erg,$n,"datum"),0,6)) == date("d.m.")-1){
> $bgcolor = "#C0C0C0"; } //silber
> falsch läuft, wenn der Monat wechselt?
print_r(substr(mysql_result($erg,$n,"datum"),0,6));
print_r(date("d.m.")-1);
MfG
Niels
--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´
Re: Datum farbig darstellen
am 07.08.2005 11:09:36 von Martin Kurz
Hallo,
> das meine Vorgehensweise vielleicht nicht optimal ist, mag sein, aber
> eigentlich wollte ich nur wissen, warum beim Monatswechsel keine andere
> Farbe angezeigt wird? Beim if () ... elseif () ist es geanu dasselbe, es
> wird beim Monatswechsel keine andere Farbe angezeigt. Vielleicht kann
> mir jemand helfen, was an meinem Vergleich
> if((substr(mysql_result($erg,$n,"datum"),0,6)) == date("d.m.")-1){
> $bgcolor = "#C0C0C0"; } //silber
> falsch läuft, wenn der Monat wechselt?
Das liegt daran, dass Du die date-Funktion nicht so verwendest, wie Du denkst :)
date("d.m.", time() - $i*60*60*24)
wobei $i die Anzahl an Tagen ist, die Du zurück gehst. Siehe
http://www.php.net/manual/de/function.date.php
Bei Deiner Methode wandelt php das Date in eine Zahl um und zieht jeweils die
Differenz an Tagen ab, Du erhälst kein Datum sondern eine Zahl (beim letzten des
Vormonats 0.MM, dann geht's weiter mit negativen Zahlen).
Grüße,
Martin
Re: Datum farbig darstellen
am 07.08.2005 15:35:14 von Hartmut Holzgraefe
Martin Kurz wrote:
> Das liegt daran, dass Du die date-Funktion nicht so verwendest, wie Du =
denkst :)
>=20
> date("d.m.", time() - $i*60*60*24)
>=20
> wobei $i die Anzahl an Tagen ist, die Du zurück gehst. Siehe
> http://www.php.net/manual/de/function.date.php
und regelmäßig zu Begin/Ende der Sommerzeit fliegst du auch mit
diesem Ansatz auf die Schnauze.
Tip: mktime() akzeptiert auch 'negative' Tage und konvertiert
entsprechend ....
--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com
Re: Datum farbig darstellen
am 07.08.2005 17:40:28 von Martin Kurz
Hartmut Holzgraefe schrieb:
>> date("d.m.", time() - $i*60*60*24)
> und regelmäßig zu Begin/Ende der Sommerzeit fliegst du auch mit
> diesem Ansatz auf die Schnauze.
Hoppala, das stimmt natürlich - aber nur bei kritischen Zeiten, wenn's immer nur
zwischen 1.00 und 23.00 aufgerufen wird, passt's :)
Re: Datum farbig darstellen
am 07.08.2005 18:21:59 von Klaus FEIMER
Hartmut Holzgraefe schrieb:
> Martin Kurz wrote:
>
>> Das liegt daran, dass Du die date-Funktion nicht so verwendest, wie Du
>> denkst :)
>>
>> date("d.m.", time() - $i*60*60*24)
>>
>> wobei $i die Anzahl an Tagen ist, die Du zurück gehst. Siehe
>> http://www.php.net/manual/de/function.date.php
>
>
> und regelmäßig zu Begin/Ende der Sommerzeit fliegst du auch mit
> diesem Ansatz auf die Schnauze.
>
> Tip: mktime() akzeptiert auch 'negative' Tage und konvertiert
> entsprechend ....
>
alles klar, vielen Dank für die Hilfe
Klaus
Re: Datum farbig darstellen
am 07.08.2005 21:56:14 von Hartmut Holzgraefe
Martin Kurz wrote:
> Hoppala, das stimmt natürlich - aber nur bei kritischen Zeiten, wenn'=
s immer nur
> zwischen 1.00 und 23.00 aufgerufen wird, passt's :)
naja, es kommt oft genug vor das wir auf bugs.php.net dafür
einen quickfix-entry dafür angelegt haben ... ;)
--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com