phpbar.de logo

Mailinglisten-Archive

[php] Problem bei Datumsberechnungen

[php] Problem bei Datumsberechnungen

Juri Smarschevski smj_(at)_intratools.de
Wed, 31 Jan 2001 14:22:29 +0100


> -----Original Message-----
> From: php-admin_(at)_php-center.de [mailto:php-admin_(at)_php-center.de]On Behalf
> Of Thomas Schürmann
> To: php_(at)_php-center.de
> Subject: Re: [php] Problem bei Datumsberechnungen
>
> Hallo Juri,
Hi Thomas,

> >Juri Smarschevski schrieb:
> > Ich finde zwar kein passendes und verstaendliches Beispiel,
> > aber ganz grob gesagt, die Stunden bzw. St:min:sec muessen
> > mitspielen, da die Zeit 00:00:00 in einigen Faellen kann
> > als Tag vorher oder als Tag danach interpretiert werden.
> >
Oo, grober Schreibfehler "da die Zeit 00:00:00 in einigen Faellen
 als Tag vorher oder als Tag danach interpretiert werden kann",
so ist's besser ;-)

> Heisst also, für meinen speziellen Anwendungsfall genügt es, statt
>
> $lmonat   = date ("m-Y", mktime (0, 0, 0, date("m") - 1, date("d"),
> date("Y")));
> z.B.
> $lmonat   = date ("m-Y", mktime (12, 0, 0, date("m") - 1, date("d"),
> date("Y")));
>                                  ^^
> zu schreiben.
Ne, genuegt's nicht

> Dann dürften aber einige Beispiele in der PHP-Literatur zumindest
> der Überarbeitung
> bzw. Ergänzung bedürfen (Mark, ist dein Buch schon in der Presse?).

Keine Ahnung, lese keine Buecher (lesen ist schwer, verstehen noch
schwerer ;-) ). Uebrigens auf php.net sind einige User Notes zum
Thema mktime falsch, die sind auch nicht offiziel, klar, aber just
for info.
Ok, zurueck zu Deinem Beispiel

$amonat = date ("Y-m-d", mktime (0, 0, 0, date("m")-1, date("d"),
date("Y")));
print "$amonat<br>"; // 2000-12-31

$amonat = date ("Y-m-d", mktime (0, 0, 0, date("m")-2, date("d"),
date("Y")));
print "$amonat<br>"; // 2000-12-01 und nicht 2000-11-30

Das kann man als Bug bezeichnen, oder auch nicht
Jan -31 Days
Dez -31 Days
Nov -30 Days

Offensichtlich wird's  30.Nov 24-00-00 als 1.Dez. 00-00-00
interpretiert, schreiben wir hingegen
$amonat = date ("Y-m-d", mktime (0, 0, 0, date("m")-2, date("d"),
date("Y")) - 1); // 1 Sec. abziehen
dann hab ma als Ergebnis 2000-11-30

So, jetzt ist die "Verwirrungsstufe" gut genug (fuer beiden) und
ich kann mich verabschieden ;-)

Gruss,
Juri




php::bar PHP Wiki   -   Listenarchive