| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

25-02-2010, 11:44
|
|
streuner
Registrierter Benutzer
|
|
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
|
|
strtotime fehlerhaft?
Hi.
Ich habe ein Formular, wo sich der User eine Start- und Endzeit auswählt. In diesem Zeitfenster führe ich dann verschiedene Berechnungen etc. aus, was auch gut funktioniert.
Jedoch spuckt er für folgendes Beispiel nicht Ende April, sondern Anfang Mai aus. Woran liegt das? Problem ist auch bei sämtlichen anderen Monatswerten am Ende.
PHP-Code:
$beispielDate = "2010-03-31"; echo date("Y-m-d", strtotime("$beispielDate +1 months"));
mfg streuner
Danke. Mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.
"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
|

25-02-2010, 11:58
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.310
|
|
Weil der April nur 30 Tage hat, month aber offenbar von 31 ausgeht.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

25-02-2010, 12:07
|
|
streuner
Registrierter Benutzer
|
|
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
|
|
Hi.
Ok, bin davon ausgegangen, dass +1 months ein allg. Befehl ist (unabhängig von der Tagesanzahl je Monat), der so etwas beachtet.
Dann muss ich das anders machen. Thanx.
mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.
"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
|

25-02-2010, 12:10
|
unset
 Moderator
|
|
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.778
|
|
Eigentlich bin ich auch von dem verhalten ausgegangen …*mal forschen.
Edit: Früher war mal ein Link in der Doku, dass die Syntax der von GNU date entspricht. Kurz gegooglet und das gefunden.
Geändert von unset (25-02-2010 um 12:15 Uhr)
|

25-02-2010, 12:16
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
PHP-Code:
echo date("Y-m-d", strtotime("2010-01-30 +1 month")); // 2010-03-02
echo date("Y-m-d", strtotime("2010-02-31 +1 month")); // 2010-04-03
|

25-02-2010, 12:16
|
|
Slava
PHP Senior
|
|
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.583
|
|
Zitat:
Zitat von Kropff
Weil der April nur 30 Tage hat, month aber offenbar von 31 ausgeht.
Peter
|
Genau. Da ein Monat von 28 bis 31 tagen lang sein kann, versucht die funktion ein Monat als anzahl von den Tagen in $beispielDate -Monat auszugehen.
Das sieht man besonders wenn mann mit "2010-01-31 +1 months" und dann mit "2009-11-30 +3 months"
versucht.
Ich will nicht behaupten, dass so ein Verhalten für jeden richtig ist, aber was willst du machen, wenn der Monat eben keine genaue Einheit ist.
würde man bei "2010-03-31 +1 months" ein 2010-04-30 bekommen, dann hätten bestimmt die Leute frage gestellt:
Warum (2010-03-31 +1 months) und (2010-03-30 +1 months) gleichen Ergebnis liefern
|

25-02-2010, 12:20
|
|
streuner
Registrierter Benutzer
|
|
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
|
|
Danke für die Antworten.
Stimmt eine konkrete Lösung "kann" es ja auch nicht geben in dem Fall.
Wenn man z.B. die Differenz des Datums zum Ende des eingegebenen Monats nimmt und als Basis für +1 months nimmt, kommt das ja auch nicht hin! Grübel...!
Werde das Problem jetzt anders lösen. Thanx nochmal.
mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.
"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
|

25-02-2010, 18:06
|
goth
 Moderator
|
|
Registriert seit: Mar 2002
Ort: Erde
Beiträge: 7.242
|
|
Zitat:
Zitat von Kropff
Weil der April nur 30 Tage hat, month aber offenbar von 31 ausgeht.
Peter
|
Dann würde aber auch
PHP-Code:
<?php echo strftime("%Y-%m-%d", strtotime("2000-02-01 +1 month")); ?>
Den 2000-03-03 ausgeben und nicht 2000-03-01 ...
Das Problem ist wohl eher die "Landing Zone" ...
__________________
carpe noctem
Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht!
Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung!
http://www.mysqldiff.org
|

26-02-2010, 07:48
|
|
streuner
Registrierter Benutzer
|
|
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 461
|
|
Was meinst Du mit "landing zone"?
mfg streuner
__________________
Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.
"Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"
|

26-02-2010, 16:04
|
goth
 Moderator
|
|
Registriert seit: Mar 2002
Ort: Erde
Beiträge: 7.242
|
|
Zitat:
Zitat von streuner
Was meinst Du mit "landing zone"?
mfg streuner
|
Na ... das Problem tritt nur auf, wenn ich ein Datum um einen Monat inkrementiere, dessen Tag ausserhalb des Gültigkeitsbereichs des Zielmonats ist.
"Landing Zone" der Punkt wo das Ergebnis landet ...
__________________
carpe noctem
Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht!
Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung!
http://www.mysqldiff.org
|

01-03-2010, 12:53
|
|
DSitC
Registrierter Benutzer
|
|
Registriert seit: Feb 2010
Beiträge: 15
|
|
Das "Problem" ist halt das strtotime() zuerst mal den absoluten Teil des Datums verarbeitet, bevor es an die relativen Anweisungen kommt. D.h. ein "ungültiges" Datum wird zuerst in ein gültiges umgewandelt und dann der Monat drauf addiert.
Am Beispiel:
Eingabe: "31.02.2010 +1 month"
1. Schritt: "31.02.2010" > Wird zu "03.03.2010" (da der Feb. 2010 nur 28 Tage hat)
2. Schritt: "+1 month" > Erzeugt dann, ausgehend vom 1. Schritt, den "03.04.2010"
Die Funktion strtotime() ist schon in Ordnung wie es ist, man muss nur wissen das es eben so funktioniert.
|

01-03-2010, 13:47
|
unset
 Moderator
|
|
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.778
|
|
Zitat:
Zitat von DSitC
D.h. ein "ungültiges" Datum wird zuerst in ein gültiges umgewandelt und dann der Monat drauf addiert.
|
In dem Beispiel oben, ist es genau umgekehrt: Es wird ein Monat aufaddiert und dann das Datum korrigiert.
|

01-03-2010, 13:52
|
|
DSitC
Registrierter Benutzer
|
|
Registriert seit: Feb 2010
Beiträge: 15
|
|
Narf, stimmt! Mea culpa...
|

01-03-2010, 15:43
|
|
wono
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 32
|
|
Bin mir nicht sicher aber probiers mal mit
echo date("Y-m-d", strtotime("$beispielDate +1 months, -1day"));
|

01-03-2010, 15:47
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von wono
Bin mir nicht sicher aber probiers mal mit
echo date("Y-m-d", strtotime("$beispielDate +1 months, -1day"));
|
Wie wäre es, wenn du es selber ausprobierst, bevor du anderen _irgendwas_ empfiehlst?
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|