php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


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! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 25-02-2010, 12:44
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
Standard 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 ---"
Mit Zitat antworten
  #2 (permalink)  
Alt 25-02-2010, 12:58
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #3 (permalink)  
Alt 25-02-2010, 13:07
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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 ---"
Mit Zitat antworten
  #4 (permalink)  
Alt 25-02-2010, 13:10
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

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 13:15 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 25-02-2010, 13:16
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

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 
Mit Zitat antworten
  #6 (permalink)  
Alt 25-02-2010, 13:16
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Kropff Beitrag anzeigen
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
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #7 (permalink)  
Alt 25-02-2010, 13:20
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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 ---"
Mit Zitat antworten
  #8 (permalink)  
Alt 25-02-2010, 19:06
goth
  Moderator
Links : Onlinestatus : goth ist offline
Registriert seit: Mar 2002
Ort: Erde
Beiträge: 7.272
goth ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Kropff Beitrag anzeigen
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!
Mit Zitat antworten
  #9 (permalink)  
Alt 26-02-2010, 08:48
streuner
 Registrierter Benutzer
Links : Onlinestatus : streuner ist offline
Registriert seit: Aug 2009
Ort: Lüneburg
Beiträge: 623
streuner ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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 ---"
Mit Zitat antworten
  #10 (permalink)  
Alt 26-02-2010, 17:04
goth
  Moderator
Links : Onlinestatus : goth ist offline
Registriert seit: Mar 2002
Ort: Erde
Beiträge: 7.272
goth ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von streuner Beitrag anzeigen
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!
Mit Zitat antworten
  #11 (permalink)  
Alt 01-03-2010, 13:53
DSitC
 Registrierter Benutzer
Links : Onlinestatus : DSitC ist offline
Registriert seit: Feb 2010
Beiträge: 15
DSitC befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #12 (permalink)  
Alt 01-03-2010, 14:47
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von DSitC Beitrag anzeigen
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.
Mit Zitat antworten
  #13 (permalink)  
Alt 01-03-2010, 14:52
DSitC
 Registrierter Benutzer
Links : Onlinestatus : DSitC ist offline
Registriert seit: Feb 2010
Beiträge: 15
DSitC befindet sich auf einem aufstrebenden Ast
Standard

Narf, stimmt! Mea culpa...
Mit Zitat antworten
  #14 (permalink)  
Alt 01-03-2010, 16:43
wono
 Registrierter Benutzer
Links : Onlinestatus : wono ist offline
Registriert seit: Oct 2009
Beiträge: 32
wono befindet sich auf einem aufstrebenden Ast
Standard

Bin mir nicht sicher aber probiers mal mit
echo date("Y-m-d", strtotime("$beispielDate +1 months, -1day"));


Mit Zitat antworten
  #15 (permalink)  
Alt 01-03-2010, 16:47
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.593
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von wono Beitrag anzeigen
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?
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
denkproblem strtotime + mysqlabfrage dani_o PHP Developer Forum 4 11-09-2008 08:34
Probleme mit strtotime() bweichel PHP Developer Forum 4 14-05-2007 17:30
Zeitproblem mit strtotime p_rehm PHP Developer Forum 2 07-09-2004 01:51
[Funktion] Fehler in strtotime? fri PHP Developer Forum 1 02-03-2004 21:30
Probs mit strtotime Citycobra PHP Developer Forum 2 02-09-2002 18:45

Themen-Optionen
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:42 Uhr.