Datum farbig darstellen

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