Differenz zwischen zwei Datumsangaben
Mathiis
- php
0 Beat0 Ingo Turski0 Christian Seiler
Hallo,
für einen Kalender möchte ich eine Funktion einbauen, die einen Serientermin zulässt (täglich, wöchentlich, monatlich...).
Dazu habe ich ein StartDatum DD.MM.YYYY und ein Enddatum DD.MM.YYYY.
Ich habe nun die Daten mit substr auseinandergepflückt und in einzelne Variablen gepackt.
Dann mit
$utstart=mktime(0, 0, 0, $day1, $month1, $year1);
$utend=mktime(0, 0, 0, $day2, $month2, $year2);
$diff= ($utend - $utstart);
$diff=$diff/(60*60*24);
versucht die Differenz der Daten mit Hilfe von mktime herauszufinden.
Dabei kommt aber nur murks raus.
Weiß einer, wo mein Fehler liegt?
Danach wollte ich die Differenz nehmen und mit einer Schleife die Datenbankeinträge steuern.
$utstart=mktime(0, 0, 0, $day1, $month1, $year1);
$utend=mktime(0, 0, 0, $day2, $month2, $year2);
Du gehst von falschen Tatsachen aus:
Handbuch:
int mktime ( [int $Stunde [, int $Minute [, int $Sekunde [, int $Monat [, int $Tag [, int $Jahr [, int $is_dst]]]]]]] )
mfg Beat
$utstart=mktime(0, 0, 0, $day1, $month1, $year1);
$utend=mktime(0, 0, 0, $day2, $month2, $year2);Du gehst von falschen Tatsachen aus:
Handbuch:
int mktime ( [int $Stunde [, int $Minute [, int $Sekunde [, int $Monat [, int $Tag [, int $Jahr [, int $is_dst]]]]]]] )mfg Beat
Ich habe Strings, brauche aber int?
$utstart=mktime(0, 0, 0, $day1, $month1, $year1);
$utend=mktime(0, 0, 0, $day2, $month2, $year2);Du gehst von falschen Tatsachen aus:
Handbuch:
int mktime ( [int $Stunde [, int $Minute [, int $Sekunde [, int $Monat [, int $Tag [, int $Jahr [, int $is_dst]]]]]]] )mfg Beat
Ich habe Strings, brauche aber int?
nein, du hast 0, 0, 0, tag, monat, jahr
erwartet wird 0, 0, 0, monat, tag, jahr
das int/string-problem erledigt sich bei php quasi von selbst - allerdings ist es sauberer hier mit intval zu arbeiten
nein, du hast 0, 0, 0, tag, monat, jahr
erwartet wird 0, 0, 0, monat, tag, jahr
Danke das du mir die Tomaten von den Augen genommen hast... ;-)
Danke das du mir die Tomaten von den Augen genommen hast... ;-)
das hör ich diese woche schon zum dritten mal ;)
Hallo.
Danke das du mir die Tomaten von den Augen genommen hast... ;-)
das hör ich diese woche schon zum dritten mal ;)
Du solltest dich weniger mit Kartoffeln unterhalten.
MfG, at
$utstart=mktime(0, 0, 0, $day1, $month1, $year1);
$utend=mktime(0, 0, 0, $day2, $month2, $year2);Du gehst von falschen Tatsachen aus:
Handbuch:
int mktime ( [int $Stunde [, int $Minute [, int $Sekunde [, int $Monat [, int $Tag [, int $Jahr [, int $is_dst]]]]]]] )mfg Beat
Ich habe Strings, brauche aber int?
Wann hast du das letzte Mal das handbuch konsultiert?
Da steht:
Die Reihenfolge der Argumente in mktime ist:
stunde
minute
sekunde
monat
tag
jahr
sommerzeit
mfg Beat
Jetzt gab es eine dreifache Antwort um die gleiche Minute.
Ich hoffe der Fragesteller nimmt das nicht zu deftig an. Das kann passieren.
mfg Beat
Jetzt gab es eine dreifache Antwort um die gleiche Minute.
ich war aber der erste!!!!!!11111one :p
Jetzt gab es eine dreifache Antwort um die gleiche Minute.
ich war aber der erste!!!!!!11111one :p
test
int mktime ( [int $Stunde [, int $Minute [, int $Sekunde [, int $Monat [, int $Tag [, int $Jahr [, int $is_dst]]]]]]] )
Ich habe Strings, brauche aber int?
Nein, du hast Tomaten auf den Augen ^^ und solltest mal auf die Reihenfolge der Parameter achten.
Hi,
Dazu habe ich ein StartDatum DD.MM.YYYY und ein Enddatum DD.MM.YYYY.
Ich habe nun die Daten mit substr auseinandergepflückt
warum überhaupt? Wenn Du vorhast, zu vergleichen, dann solltest Du das Datum im Format YYYY.MM.DD speichern - dann reicht ein simpler String-Vergleich aus und Du musst den String lediglich für die Ausgabe neu formatieren.
freundliche Grüße
Ingo
Hallo,
Dazu habe ich ein StartDatum DD.MM.YYYY und ein Enddatum DD.MM.YYYY.
Ich habe nun die Daten mit substr auseinandergepflückt
warum überhaupt? Wenn Du vorhast, zu vergleichen, dann solltest Du das Datum im Format YYYY.MM.DD speichern - dann reicht ein simpler String-Vergleich aus und Du musst den String lediglich für die Ausgabe neu formatieren.
vor allem weil es (in diversen Ländern) gesetzliche Vorschriften gibt, die die Sekundenrechnung mindestens an zwei Tagen im Jahr empfindlich stören ...
Freundliche Grüße
Vinzenz
Hallo,
$utstart=mktime(0, 0, 0, $day1, $month1, $year1);
$utend=mktime(0, 0, 0, $day2, $month2, $year2);
$diff= ($utend - $utstart);
$diff=$diff/(60*60*24);
Unabhängig vom Tag/Monat-Problem: Du gehst hier aber fälschlicherweise davon aus, dass ein Tag immer 24 Stunden hat. Das stimmt in Lokalzeit aber leider nicht (ein Tag im Jahr hat 23 Stunden und einer hat 25 Stunden - wegen der Zeitumstellung). Ich würde daher vorschlagen, gmmktime() statt mktime() zu verwenden, gmmktime() verwendet eine kontinuierliche Zeitskala. Es rechnet zwar immer in UTC (und damit in einer anderen Zeitzone, als Du lebst), aber zumindest die kalendarischen Berechnungen sind damit exakt.
Alternativ könntest Du natürlich auch das ganze als Float-Division schreiben und dann runden, das halte ich aber für nicht sonderlich optimal.
Oder Du rechnest von Hand, ich habe im Archiv etliche Postings zum Thema Datums- und Zeitberechnung in PHP verfasst.
Viele Grüße,
Christian