Datum und Zeitzonen in PHP

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    Last edited by zach_1; 20-01-2012, 08: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.

    Comment


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

      Comment


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

        Comment


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

          Comment


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

            Comment


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

              Comment


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

                Comment


                • #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.
                  Last edited by AmicaNoctis; 05-01-2012, 14: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]

                  Comment


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

                    Comment


                    • #11
                      Originally posted by h3ll View Post
                      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:

                      Originally posted by zach_1 View Post
                      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]

                      Comment


                      • #12
                        Originally posted by AmicaNoctis View Post
                        Die Problemstellung spricht aber nicht von Tagen
                        Der Variablenname schon. Also eins von beiden stimmt nicht.

                        Comment


                        • #13
                          OffTopic:

                          Originally posted by h3ll View Post
                          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]

                          Comment


                          • #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.
                            Last edited by ezkimo; 06-01-2012, 09:16.
                            MM Newmedia | MeinBlog

                            Comment


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

                              Comment

                              Working...
                              X