Datum und Zeitzonen in PHP

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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 %== 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:

    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
    Zuletzt geändert von zach_1; 20.01.2012, 09:15.

  • #2
    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.

    Kommentar


    • #3
      Danke dir. Das hat geklappt. Ich dachte ich müße das php.ini angreifen und dort einen eintrag setzen.

      Kommentar


      • #4
        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.

        Kommentar


        • #5
          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
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            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?

            Kommentar


            • #7
              [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

              Kommentar


              • #8
                Danke dir....
                Man sieht den Wald vor lauter Bäumen nicht mehr

                Kommentar


                • #9
                  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.
                  Zuletzt geändert von AmicaNoctis; 05.01.2012, 15:52.
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Kommentar


                  • #10
                    $tag = (60*60)*24;
                    ist falsch. Nicht jeder Tag hat 24 Stunden.

                    Kommentar


                    • #11
                      Zitat von h3ll Beitrag anzeigen
                      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 von zach_1 Beitrag anzeigen
                      Es sollen nur die files angezeigt werden die nicht älter als 24 Std. sind.
                      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                      Super, danke!
                      [/COLOR]

                      Kommentar


                      • #12
                        Zitat von AmicaNoctis Beitrag anzeigen
                        Die Problemstellung spricht aber nicht von Tagen
                        Der Variablenname schon. Also eins von beiden stimmt nicht.

                        Kommentar


                        • #13
                          OffTopic:

                          Zitat von h3ll Beitrag anzeigen
                          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.
                          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                          Super, danke!
                          [/COLOR]

                          Kommentar


                          • #14
                            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.
                            Zuletzt geändert von ezkimo; 06.01.2012, 10:16.
                            MM Newmedia | MeinBlog

                            Kommentar


                            • #15
                              Danke an alle
                              ich werde es heute mit euren anregungen weiterversuchen. Wir hatten feiertag.

                              Kommentar

                              Lädt...
                              X