Falsches Ergebnis bei strtotime
HP-Bauer
- php
Hallo,
in einem Script verwende ich strtotime, um z.B. den ersten Mittwoch im November 2011 zu ermitteln.
strtotime("wednesday november 2011");
Dabei erhalte ich den Timestamp des 02.11.2011.
Nun habe ich dieses Script mit dem selben Befehl auf einem 1&1-Server installiert und ich erhalte den 26.11.2011 (als Tageszahl immer den aktuellen Tag, z.B. 26.12.2011 oder 26.01.2012). Woran kann das liegen? Was wird auf dem 1&1-Server anders interpretiert? Ich habe das Script auf dem 1&1-Server sowohl mit php4 und php5 ausgeführt, mit dem gleichen Ergebnis.
strtotime("wednesday of november 2011");
strtotime("first wednesday of november 2011");
strtotime("first wednesday november 2011");
Damit funktionierte es ebenfalls nicht.
MfG,
HP-Bauer
Hi!
in einem Script verwende ich strtotime, um z.B. den ersten Mittwoch im November 2011 zu ermitteln.
strtotime("wednesday november 2011");
Dabei erhalte ich den Timestamp des 02.11.2011.
Nun habe ich dieses Script mit dem selben Befehl auf einem 1&1-Server installiert und ich erhalte den 26.11.2011 (als Tageszahl immer den aktuellen Tag, z.B. 26.12.2011 oder 26.01.2012).
Hast du die Timestamps verglichen, die strtotime() liefert, oder schaust du dir nur die irgendwie umgewandelten Ausgaben an?
Lo!
Hast du die Timestamps verglichen, die strtotime() liefert, oder schaust du dir nur die irgendwie umgewandelten Ausgaben an?
Ja, habe ich. Die Timestamps sind unterschiedlich.
MfG,
HP-Bauer
Hi!
Hast du die Timestamps verglichen, die strtotime() liefert, oder schaust du dir nur die irgendwie umgewandelten Ausgaben an?
Ja, habe ich. Die Timestamps sind unterschiedlich.
Ich kann das nicht nachvollziehen (hab allerdings keinen 1&1-Webhost-Zugang). Bei "last" würde ich das verstehen, denn das ist zweideutig, weil es sich auch auf das jüngst vergangene Datum beziehen kann, wenn man nicht explizit "of" vor den Monat schreibt. Aber bei "first" sollte es problemlos gehen.
Dass unterschiedliche Versionen unterschiedlich arbeiten, kommt vor. Wenn aber dieselbe Version bei dir wie bei 1&1 unterschiedliche Ergebnisse bringen, kann es eigentlich nur ein Konfigurationsproblem sein. Schau mal die phpinfo()-Ausgaben im Abschnitt "date" an. Andererseits jedoch haben Zeitzonen nur sehr wenig mit dem Datum zu tun und sollten maximal einen Tag Abweichung ergeben.
Lo!
Hallo,
der Server scheint mit der Angabe des Tagnamens nichts anfangen zu können. strtotime("wednesday november 2011") wird wie strtotime("november 2011") ausgeführt und heute zum Beispiel der Timestamp des 27.11.2011 geliefert. Kann es sein, dass der Server vielleicht eines Zeichensatzproblems die Konstanten für die Tagnamen nicht wie gewohnt zur Verfügung stellt?
Mfg,
HP-Bauer
Moin!
Hallo,
der Server scheint mit der Angabe des Tagnamens nichts anfangen zu können. strtotime("wednesday november 2011") wird wie strtotime("november 2011") ausgeführt und heute zum Beispiel der Timestamp des 27.11.2011 geliefert. Kann es sein, dass der Server vielleicht eines Zeichensatzproblems die Konstanten für die Tagnamen nicht wie gewohnt zur Verfügung stellt?
Oder wegen der Lokalisierung?
Was liefert "Mittwoch November 2011"?
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Oder wegen der Lokalisierung?
Was liefert "Mittwoch November 2011"?
Dies erkennt er leider auch nicht und liefert "-1". Wie könnte das noch lösen?
Mfg,
HP-Bauer
Moin!
Wie könnte das noch lösen?
Einfach, schnell, schmutzig und primitiv:
<?php
#Test:
print getFirstWeekDayInMountAsGermanDate(11,2011,2)."\n";
function getFirstWeekDayInMountAsGermanDate($Monat, $Jahr, $WeekDay) {
#$Monat='1...12(Januar...Dezember)
#
#$WeekDay=0 oder 7 für Sonntag;
#$WeekDay=1 für Montag
# ...
#$WeekDay=6 für Sonnabend;
$intWoTag=date('w', mktime (0,0,0, $Monat,1,$Jahr)); # 0 ... 6
if ( $WeekDay == $intWoTag ) {
return '01.' . ZweiStellig($Monat) . '.' . $Jahr;
} else {
if ($intWoTag < $WeekDay) {
return ZweiStellig($WeekDay-$intWoTag+1) . '.' . ZweiStellig($Monat) . '.' . $Jahr;
} else {
return ZweiStellig($WeekDay-$intWoTag+8) . '.' . ZweiStellig($Monat) . '.' . $Jahr;
}
}
return false;
}
function ZweiStellig($int) {
$int=intval($int);
if ($int < 10) {
return '0'.$int;
} else {
return $int;
}
}
?>
Entschuldige die Mischung deutsch/englisch - aber die Lösung ist "Einfach, schnell, schmutzig und primitiv" - und universeller als Deine Frage
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Vielen Dank, ich werde das mal testen und soweit kürzen, da ich eigentlich nur den Monatstag als Zahl für die Weiterverarbeitung benötige. Ich habe 1&1 auch eine Support-Mail geschrieben, auch wenn da höchstwahrscheinlich nichts dabei herauskommt.
Mfg,
HP-Bauer
Moin!
Korrektur des Kommentars: Sonntag stets mit 0 angeben nicht mit 7
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Moin!
Korrektur des Kommentars:
<?php
#Test:
print firstWeekDayInMountAsGermanDate(1,2012,0)."\n";
function firstWeekDayInMountAsGermanDate($Monat, $Jahr, $WeekDay) {
#$Monat='1...12(Januar...Dezember)
#
#$WeekDay=0 für Sonntag;
#$WeekDay=1 für Montag
# ...
#$WeekDay=6 für Sonnabend;
$intWoTag=date('w', mktime (0,0,0, $Monat,1,$Jahr)); # 0 ... 6
if ( $WeekDay == $intWoTag ) {
return '01.' . ZweiStellig($Monat) . '.' . $Jahr;
} else {
if ($intWoTag < $WeekDay) {
return ZweiStellig($WeekDay-$intWoTag+1) . '.' . ZweiStellig($Monat) . '.' . $Jahr;
} else {
return ZweiStellig($WeekDay-$intWoTag+8) . '.' . ZweiStellig($Monat) . '.' . $Jahr;
}
}
return false;
}
function ZweiStellig($int) {
$int=intval($int);
if ($int < 10) {
return '0'.$int;
} else {
return $int;
}
}
?>
Den Sonntag also NICHT auf 7 setzen.
Grund: Die Funktion gibt sonst den 8.1.2012 als ersten Sonntag im Januar 2012 aus.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Om nah hoo pez nyeetz, HP-Bauer!
Diese Seite kenne ich natürlich. Trotzdem liefert strtotime unterschiedliche Ergebnisse, obwohl phpinfo() mir identische PHP-Versionen ausgibt. Woran kann es noch liegen?
MfG,
HP-Bauer