| 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! |
 |
|

05-01-2012, 14:32
|
|
zach_1
Registrierter Benutzer
|
|
Registriert seit: Jan 2012
Beiträge: 25
|
|
Datum und Zeitzonen in PHP
Hallo
Ich sitze hier vor einem größeren Problem und komme nicht mehr weiter. Nun hoffe ich auf eure hilfe oder unterstützung.
Ich öffne eine Datei und lesen daraus die files bezw. lesen von diesen das dAtum der erstellung aus. Dies klappt auch. Nun will ich das Datum mit dem aktuellen Datum vergleichen. Es sollen nur die files angezeigt werden die nicht älter als 24 Std. sind.
Mein Code dafür sieht so aus:
PHP-Code:
if ($tf %2 == 0) {echo '<tr></tr>'; } $datum = date (" d m Y H:i:s.", filemtime($handle.$datei)); $heute = date (" d m Y H:i:s.", time()); $anzahltage = ($heute - $datum);
if ($anzahltage == 1) { $filesize = sprintf("%u", filesize($handle.$datei));
Bei der ausgabe bekomme ich jetzt die folgende Fehlermeldung:
Zitat:
|
Warning: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in /var/www/xxxx/xxxxx/sls.php on line 79
|
Könnt ihr mir helfen dieses Problem zu lösen?
Danke im vorraus
Geändert von zach_1 (20-01-2012 um 09:15 Uhr)
|

05-01-2012, 14:45
|
|
ddel
Registrierter Benutzer
|
|
Registriert seit: Jan 2012
Beiträge: 9
|
|
Hi Zach
Nun es gibt 2 Möglichkeiten um das Problem zu lösen:
1. (Eher unschön..) Du unterbindest die Warnung mit @
2. Setze mittels der Funktion date_default_timezone_set die Timezone für dein System. Wenn du aber mit verschiedenen Files aus verschiedenen Timezonen arbeitest, könnte dies trotzdem zu einem Problem führen.
Gruss, D.
|

05-01-2012, 14:49
|
|
zach_1
Registrierter Benutzer
|
|
Registriert seit: Jan 2012
Beiträge: 25
|
|
Danke dir. Das hat geklappt. Ich dachte ich müße das php.ini angreifen und dort einen eintrag setzen.
|

05-01-2012, 14:57
|
|
zach_1
Registrierter Benutzer
|
|
Registriert seit: Jan 2012
Beiträge: 25
|
|
Ich hätte hier noch eine frage zu meinem Script.
Woran scheitert die Datumberechnung? Ich habe die aktuelle Zeit und die Zeit des files. Und wenn ich beides von einander abziehe, und ich dann schreibe "==1" so müßte dies doch klappen? Aber das wird völlig ignoriert.
|

05-01-2012, 15:25
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
sieh dir deine Variablen mal an. Mit Strings kann man nun mal nicht vernünftig rechnen. Dass du sie für die Ausgabe menschenlesbar formatierst, ist völlig in Ordnung, aber rechnen kannst du damit nur, bevor du sie mit date() formatierst, also mit UNIX-Timestamps. Beachte dabei aber, dass die Differenz zwischen zwei Timestamps nicht die Anzahl der Tage sind, sondern die Anzahl der Sekunden, um die sie voneinander abweichen.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

05-01-2012, 15:42
|
|
zach_1
Registrierter Benutzer
|
|
Registriert seit: Jan 2012
Beiträge: 25
|
|
Hallo amica
Ich habe es nun so umgestellt:
PHP-Code:
$datum_rechnung = filemtime($handle.$datei); $heute =time(); $tag = (60*60)*24; $anzahltage = ($heute - $datum_rechnung); if ($anzahltage > $tag )
Aber die ausgabe ist immer noch alles und nicht auf 24 Std. gefiltert.
Wo liegt bitte hier mein Denkfehler?
|

05-01-2012, 15:47
|
|
ddel
Registrierter Benutzer
|
|
Registriert seit: Jan 2012
Beiträge: 9
|
|
[QUOTE=zach_1;658776]
PHP-Code:
$anzahltage = ($heute - $datum_rechnung); if ($anzahltage > $tag )
[QUOTE]
Die Abfrage wird niemals zutreffen, ausser du hast ein File in der Zukunft
Der UNIX Timestamp des Files liegt immer in der Vergangenheit.
Sagen wir mal heute wäre der Tmstp: 1000 von diesen ziehst du noch den tmstp des Files ab sagen wir 200 = 800-> $anzahltage
aber deine Abfrage lautet:
if(800>1000(heute))... Daher geht es nicht auf
|

05-01-2012, 15:48
|
|
zach_1
Registrierter Benutzer
|
|
Registriert seit: Jan 2012
Beiträge: 25
|
|
Danke dir....
Man sieht den Wald vor lauter Bäumen nicht mehr
|

05-01-2012, 15:49
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Die Ausgabe ist nicht alles, sondern alles was länger als einen Tag her ist. Wenn du alles innerhalb der letzten 24 Stunden haben willst, musst du wohl den Vergleichsoperator umdrehen
@ddel: Mit Zukunft hat das nichts zu tun, im Gegenteil, er vergleicht ja mit $tag, d. h. mit 86400 und bekommt zu viele Ergebnisse aus der Vorvergangenheit von gestern.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
Geändert von AmicaNoctis (05-01-2012 um 15:52 Uhr)
|

05-01-2012, 16:40
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.327
|
|
ist falsch. Nicht jeder Tag hat 24 Stunden.
|

05-01-2012, 16:46
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von h3ll
ist falsch. Nicht jeder Tag hat 24 Stunden.
|
Es wurde nie behauptet, dass es um Tage geht. Davon abgesehen, erscheint es nur so, als hätten manche Lokalzeit-Tage eine Stunde mehr oder weniger. Ein UNIX-Tag hat immer 86400 Sekunden, alles was sich ändert, ist die Zeitzone und wenn du lediglich wachrufen wolltest, dass man Zeitzonenwechsel beachten muss, gebe ich dir recht. Die Problemstellung spricht aber nicht von Tagen:
Zitat:
Zitat von zach_1
Es sollen nur die files angezeigt werden die nicht älter als 24 Std. sind.
|
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

05-01-2012, 16:49
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.327
|
|
Zitat:
Zitat von AmicaNoctis
Die Problemstellung spricht aber nicht von Tagen
|
Der Variablenname schon. Also eins von beiden stimmt nicht.
|

05-01-2012, 16:53
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
OffTopic:
Zitat:
Zitat von h3ll
Der Variablenname schon. Also eins von beiden stimmt nicht.
|
Ja, $h24 wäre als Variablenname vielleicht exakter gewesen, aber ich finde $day intuitiver. $tag ist sowieso schlecht, weil es deutsch ist und leicht mit „das Tag“ (taggen) verwechselt werden kann.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

06-01-2012, 10:14
|
|
ezkimo
Registrierter Benutzer
|
|
Registriert seit: Apr 2005
Ort: Beckum / Westf.
Beiträge: 211
|
|
Auch wenn es jetzt ein wenig aus dem Kontext ist. Ab PHP 5.3 kannst Du das in PHP von Hause aus mitgelieferte DateTime Objekt für die Berechnung von Zeitunterschieden benutzen. Mit DateTime::diff() funktioniert das soweit wunderbar.
Ansonsten kann ich Dir auch noch das SPLFileInfo Objekt ans Herz legen. Auch von Hause aus in PHP ab Version 5 integriert.
Kurzes Beispiel dazu:
PHP-Code:
$files = array(); foreach (new DirectoryIterator('bla/blubb/foo/') as $fileInfo) { if (!$fileInfo->isDot() && !$fileInfo->isDir()) { $files[] = $fileInfo; } }
$timeNow = new DateTime(); foreach ($files as $file) { $fileMTime = $file->getMTime(); $fileTime = new DateTime(); $fileTime->setTimestamp($fileMTime);
$interval = $timeNow->diff($fileTime);
var_dump($interval->format('%h Stunden')); }
Codeschnipsel ist ungetestet.
Geändert von ezkimo (06-01-2012 um 10:16 Uhr)
|

09-01-2012, 08:48
|
|
zach_1
Registrierter Benutzer
|
|
Registriert seit: Jan 2012
Beiträge: 25
|
|
Danke an alle
ich werde es heute mit euren anregungen weiterversuchen. Wir hatten feiertag.
|
|
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
|