Oktober hat nur 30 Tage

Alles, was PHP betrifft, kann hier besprochen werden.

Oktober hat nur 30 Tage

Postby winlord » 04. October 2005 12:16

Hallo alle miteinander!

Entweder ich stelle mich zu blöd an oder der Oktober hat bei PHP nur 30 Tage und nicht 31!

Ich habe ein Script geschrieben, dass mir automatisch jeden Freitag, Samstag und Sonntag der nächsten 8 Wochen in mysql (als timestamp) anlegt.
Das Script geht auch super nur immer im Monat Oktober nach November hat er Probleme, dann verschiebt sich der Freitag zum Donnerstag, der Samstag zum Freitag und der Sonntag zum Samstag.
Ich verwende die Funktion getdate um mit dem Kürzel wday den Wochentag herauszubekommen um dann das nächste Wochenende zu ermitteln.

Entweder da ist ein Bug drin, oder wie gesagt, ich stelle mich zu blöd an.
Hat davon schon jemand was gehört??

Gruß
Winlord
winlord
 
Posts: 3
Joined: 04. October 2005 12:06

Postby jakimo72 » 04. October 2005 12:52

Einmal dachte ich auch, da wäre dieser bug,
doch dann stellte ich fest, dass ich "Okt" anstelle
von "Oct" in meinem Script geschrieben hatte (Locale
war auf US gestellt.)
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby winlord » 04. October 2005 13:02

Ne, ich verwende die Monatsangabe eigentlich gar nicht.
Ich nehme das aktuelle Datum, und den Wochentag, schaue dann, wann der nächste Freitag ist und addiere als Timestamp jeweils 86400 (für einen Tag):
$freitag = $akt_datum + (5 - $wochentag + $i * 7) * 86400;
$akt_datum : aktuelles Datum
$wochentag : aktueller Wochentag vom aktuellen Datum
$i : Laufindex für die Wochen, damit man nicht nur den kommenden Freitag herausfinden kann, sonder auch in den i-Wochen danach
$freitag : Timestamp des nächsten Freitags
winlord
 
Posts: 3
Joined: 04. October 2005 12:06

Postby Wiedmann » 04. October 2005 13:08

Ohne das jetzt testen zu wollen. Warum benutzt du für sowas nicht strtotime()?

Diese Aufgabenstellung sollte sich allerdings auch direkt in SQL lösen lassen.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby jakimo72 » 04. October 2005 19:10

Also ich kann sagen, dass PHP kein bug bei der Berechnung
der Monate hat.
Aber hast Du beachtet, dass der Sonntag bei PHP die
Ordnungsnummer 0 hat und damit der erste Tag in der Woche
und nicht der letzte...
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby winlord » 05. October 2005 07:10

Ne, dass der Sonntag die 0 darstellt, hab ich schon beachtet.


Das komische ist nur, dass das Skript immer funktioniert, außer vom Oktober zum November! Egal, welches Jahr (welches Datum) man als Systemdatum einstellt, es funktioniert, wie gesagt, außer von Okt zu Nov.
winlord
 
Posts: 3
Joined: 04. October 2005 12:06

Postby jakimo72 » 05. October 2005 15:37

Ich halte sowohl Deine Berechnung für korrekt, als auch
die Monatsberechnung von PHP.
Kannst Du uns ein Codeschnipsel zeigen, der nicht funktioniert?

Nachfolgender Code funktioniert einwandfrei.
Code: Select all
<?php
$akt_datum = time();
$wochentag = date('w',$akt_datum);
echo "Heute: ",date("D Y-m-d H:i:s (W)",$akt_datum)."<br>";
for($i=-5;$i<15; $i++)
{
  $freitag = $akt_datum + (5 - $wochentag + $i * 7) * 86400;
  echo "$i: ",date("D Y-m-d H:i:s (W)",$freitag)."<br>";
}
?>
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby Wiedmann » 05. October 2005 16:07

Hi Jakimo,

bei mir tut das auch mit jedem Datum.

Aber da ich oben von strtotime() gesprochen habe, dein Script zum Vergleich nochmal mit dieser Funktion:
Code: Select all
<?php
   echo 'Heute: ', date('D Y-m-d H:i:s (W)', strtotime('now')).'<br>';
   for($i = -5; $i < 15; $i++) {
      echo $i.': ', date('D Y-m-d H:i:s (W)', strtotime('next friday '.$i.' week')).'<br>';
   }
?>
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany


Return to PHP

Who is online

Users browsing this forum: No registered users and 3 guests