kostenloser Webspace werbefrei: lima-city


date funktioniert nicht wie es soll

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    trickdieb

    Kostenloser Webspace von trickdieb

    trickdieb hat kostenlosen Webspace.

    Guten Morgen Limaraner,
    ich habe ein kleines Problem und zwar:
    Ich lasse mir die Dauer einer Aktion aus der Datenbank in Sekunden ausgeben, da ich aber dem User gerne in Minuten und Stunden sagen würde wie lange seine Aktion noch dauert möchte ich dies konvertieren, also den date Befehl rausgekramt.
    Als Beispiel:
    Eine Aktion dauert 60Sekunden, wäre logischerweise ja 1Minute. date zeigt aber an eine Stunde und eine Minute.
    Mal nen kleiner Auszug mit einer festen Dauer:

    $dauer = 60;  //Sekunden!
    $neuzeit = date('H:i:s',$dauer);
    echo '<br>'.$neuzeit ;


    Bin ich jetzt schon so durcheinander? Wäre schön wenn jemand meine Nase auf den Denkfehler drückt, von alleine komme ich nicht drauf.
    Danke und einen schönen Sonntag euch allen.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. string date ( string $format [, int $timestamp ] )
    Quelle: http://php.net/manual/de/function.date.php

    Du musst einen Timestamp verwenden. Dazu nimmst du den aktuellen (time()) und rechnest deine Zeit drauf.
    Dürfte dann so aussehen:
    date($format, (time() + 60)


    Beitrag zuletzt geändert: 3.7.2011 12:29:49 von ploco
  4. Warum denn so kompliziert...

    Wenn man etwas in Sekunden hat und es in Minuten und Stunden will dann macht man es zu Stunden also bspw. 60 Sekunden:

    60s / 3600s = 0,016666667 Stunden davon schneidet man den ganzzahligen Anteil ab, das sind die Stunden und der Rest mal 60 sind die Minuten...simpelste Mathematik.
  5. Autor dieses Themas

    trickdieb

    Kostenloser Webspace von trickdieb

    trickdieb hat kostenlosen Webspace.

    @ploco
    ich möchte nicht die Uhrzeit angeben an der die Aktion endet, ich möchte nur mit den 60sekunden arbeiten, nicht mit der normalen Uhrzeit / dem Timestamp.
    Wie ich Dauer und Zeit verrechne und anzeige weiß ich, das klappt auch alles soweit.
    Oder versteh ich deine Antwort gerade nicht?
    Verdammter Sonntag^^

    @fatfox
    das ist aber zu kompliziert, gibt es denn nicht die Möglichkeit das so wie ich es versucht habe mit date direkt zu formatieren?
    Wie ich mir das so runterrechne ist klar, aber ich habe diverse Aktionen und Weiterbildungen zum abarbeiten, das wird zuviel Tipperei vorallem da die Zeiten variieren können.

    Danke natürlich erstmal an euch beide.

    Beitrag zuletzt geändert: 3.7.2011 12:48:29 von trickdieb
  6. trickdieb schrieb:
    @ploco
    ... ich möchte nicht die Uhrzeit angeben an der die Aktion endet, ich möchte nur mit den 60sekunden arbeiten, nicht mit der normalen Uhrzeit / dem Timestamp ...
    etwass wirr formuliert. mal datediff überlegt?
    1. date-diff
    2. datetime.diff

    lg
  7. Autor dieses Themas

    trickdieb

    Kostenloser Webspace von trickdieb

    trickdieb hat kostenlosen Webspace.

    hemiolos schrieb:
    trickdieb schrieb:
    @ploco
    ... ich möchte nicht die Uhrzeit angeben an der die Aktion endet, ich möchte nur mit den 60sekunden arbeiten, nicht mit der normalen Uhrzeit / dem Timestamp ...
    etwass wirr formuliert. mal datediff überlegt?
    1. date-diff
    2. datetime.diff

    lg

    Schönen guten Morgen,

    Sorry, aber habe versucht es so verständlich zu beschreiben wie möglich.
    Letztendlich ist es wie in jedem Browsergame, du führst eine Aktion aus und dir wird angezeigt wie lange die Aktion dauert, nicht bis wann(Uhrzeit/Datum) sondern Dauer(Stunden:Minuten:Sekunden). Verständlicher?
    date_diff kenn ich noch gar nicht, noch nie gehört, werde ich mir heute Abend wenn ich von Arbeit komme mal durchlesen (und hoffentlich verstehen) und schauen was sich draus zaubern lässt.

    Danke und einen schönen Tag allen Lesenden;)
  8. Hallo, ich habe auch das Problem, dass ich nach der deutschen Installationsanleitung zu Jobberbase installiert habe.

    Bei mir findet er die DB_ host nicht
    Fehlermeldung:
    Parse error: syntax error, unexpected '{' in /homepages/26/d13353337/htdocs/arbeitvermitteln/public/_config/config.php on line 60

    So hab ich das bei mir eingetragen
    <?php
    /**
     * Define environments
     *
     */
    
    // local (http://localhost/jobberbase/public)
    $__instances['local'] = array(
            // should be a unique part of the url (or the entire url if you wish)
            'prefix' => 'localhost',
            // mysql credentials
            'db_host' => 'localhost',
            'db_port' => 3306,
            'db_user' => 'root',
            'db_password' => '',
            'db_name' => 'jobberbase',
            'db_prefix' => '',
            // your site's full url
            'app_url' => 'http://localhost/jobberbase/trunk/public/',
            // error reporting
            'ini_error_reporting' => E_ALL,
            'ini_display_errors' => 'On',
            // environment setting 1 (use 'local' for localhost/testing OR 'online' for live, production environment)
            'location' => 'local',
            // environment setting 2 (use 'dev' together with 'local' in the previous setting OR 'prod' with 'online')
            'environment' => 'dev',
            //'apache_mod_rewrite', 'iis_url_rewrite' -microsoft URL Rewrite module, 'iis_isapi_rewrite'
            'rewrite_mode' => 'apache_mod_rewrite'
    );
    
    // live (http://arbeitvermitteln.de)
    $__instances['live'] = array(
     'prefix' => 'arbeitvermitteln.de',
     'db_host' => 'mysql.arbeitvermitteln.de',
     'db_port' => 3306,
     'db_user' => 'dboxxxxxxxxxx',
     'db_password' => 'xxxxxxxxx',
     'db_name' => 'jobberbase',
     'db_prefix' => 'jb_',
     'app_url' => 'http://arbeitvermitteln.de/',
     'ini_error_reporting' => E_ALL,
     'ini_display_errors' => 'On',
     'location' => 'online',
     'environment' => 'dev',
     'rewrite_mode' => 'apache_mod_rewrite'
    );
    
    
    // setup current instance
    foreach ($__instances as $__instance)
    {
            // http requests
            if (isset($_SERVER['HTTP_HOST']))
            {
                    $_compare_to = $_SERVER['HTTP_HOST'];
            }
    
            if (strstr($_compare_to, $__instance['prefix']))
            {
                    define('DB_HOST', $__instance['db_host']);
                    define('DB_PORT', $__instance['db_port']);
                    define('DB_USER', $__instance['db_user']);
                    define('DB_PASS', $__instance['db_password']);
                    define('DB_NAME', $__instance['db_name']);
                    define('DB_PREFIX', $__instance['db_prefix']);
    
                    // values kind of redundant, they indicate wether this is a live/production or dev/testing environment
                    define('LOCATION', $__instance['location']);
                    define('ENVIRONMENT', $__instance['environment']);
    
                    // base url of the app
                    define('APP_URL', $__instance['app_url']);
                    define('REWRITE_MODE', $__instance['rewrite_mode']);
                    // error reporting
                    ini_set('error_reporting', $__instance['ini_error_reporting']);
                    ini_set('display_errors', $__instance['ini_display_errors']);
                                    break;
            }
    }
    ?>


    Die datei jobberbase.spl hab ich auch angepasst

  9. @ivpa:
    Was hat das mit dem Thema hier zu tun?!


    @trickdieb:
    Du kannst auch alternativ einfach eine eigene Funktion benutzen, in etwa so:
    function myTime($sek){
      //Stunden berrechnen
      $hour =  str_pad(intval($sek / (60 * 60)), 2 ,'0', STR_PAD_LEFT);
      //Restsekunden
      $sek  = $sek % (60 * 60); 
      //Minuten berrechnen
      $min  = str_pad(intval($sek / 60), 2 ,'0', STR_PAD_LEFT); 
      //Restsekunden
      $sek  = str_pad($sek % 60, 2 ,'0', STR_PAD_LEFT);
    		
      return("".$hour.":".$min.":".$sek."");
    }

    Und dann nachher einfach so aufrufen:
    echo myTime(5468); //Sekunden

    Sollte in diesem Fall dann folgende Ausgabe erzeugen:
    01:31:08


    Das ist doch das was du suchst oder?!

    Beitrag zuletzt geändert: 4.7.2011 11:01:39 von alfr3d
  10. Autor dieses Themas

    trickdieb

    Kostenloser Webspace von trickdieb

    trickdieb hat kostenlosen Webspace.

    Guten Abend alfr3d
    ja sowas habe ich gesucht, vielen Dank.
    Werde gleich mal schauen wie genau das funktioniert mit dem str_pad, will ja nicht nur kopieren sondern auch verstehen;)
    Schönen Abend noch
  11. trickdieb schrieb:
    Guten Abend alfr3d
    ja sowas habe ich gesucht, vielen Dank.
    Werde gleich mal schauen wie genau das funktioniert mit dem str_pad, will ja nicht nur kopieren sondern auch verstehen;)
    Schönen Abend noch


    Also die eigentliche Berechnung der Stunden und Minuten wird durch
    intval($sek / (60 * 60)
    intval($sek / 60)

    durchgeführt. Intval liefert einen Integer-Wert zurück -> d.h. Kommazahlen werden abgeschnitten.
    Str_pad sorgt lediglich dafür, dass die Zahl mit einer führenden Null aufgefüllt wird.
    Der erste Wert (intval(...)), ist der Eingabestring der aufgefüllt werden soll, die 2 nach gibt an auf wieviele Stellen der "String" gefüllt werden soll, die 0 ist das Zeichen mit dem gefüllt werden soll und "STR_PAD_LEFT" gibt an von welcher Seite aufgefüllt werden soll.
    Siehe hierzu auch:
    intval
    str_pad

    Am besten probierst du einfach ein bisschen damit herum, dann wirst du sehen, was welche Funktionen für Auswirkungen haben.
    Bei Fragen kannst natürlich gerne hier schreiben.

    Beitrag zuletzt geändert: 4.7.2011 20:43:48 von alfr3d
  12. Autor dieses Themas

    trickdieb

    Kostenloser Webspace von trickdieb

    trickdieb hat kostenlosen Webspace.

    Guten Morgen liebe Sorgen^^

    vielen Dank alfr3d, habe es hinbekommen.
    Auch wenn mir die Befehle noch nicht so einleuchten wie sie es sollten funktioniert es doch soweit:D
    Werde am Wochenende nochmal ganz genau lesen, irgendwann muss ich es ja verstehen;)

    Danke nochmals und nen schönen Tag noch
  13. function myTime($sek){
      //Stunden berrechnen
      $hour =  str_pad(intval($sek / (60 * 60)), 2 ,'0', STR_PAD_LEFT);
      //Restsekunden
      $sek  = $sek % (60 * 60); 
      //Minuten berrechnen
      $min  = str_pad(intval($sek / 60), 2 ,'0', STR_PAD_LEFT); 
      //Restsekunden
      $sek  = str_pad($sek % 60, 2 ,'0', STR_PAD_LEFT);
    		
      return("".$hour.":".$min.":".$sek."");
    }
    echo myTime(5468); //Sekunden

    Also, wir übergeben der Funktion einen Wert, der die Sekunden darstellt. Zuerst möchten wir wissen wieviele Stunden die Sekunden ergeben.
    Also teilen wir die Sekunden durch 60 * 60, da eine Stunde ja aus 60 Minuten besteht und jede Minute 60 Sekunden hat. Wir könnten einfachheitshalber auch durch 3600 teilen, keine Ahnung warum ich das nicht gemacht hab.
    $hour = $sek/3600; //5468/3600 = 1,518888...

    So, da wir aber nur die ganzen Stunden haben möchten, schneiden wir mit intval die Nachkommastelle ab:
    $hour = intval($hour); //1

    Jetzt wissen wir, wieviele ganze Stunden die übergebenen Sekunde sind. Um nun die Minuten zu berechnen benötigen wir die Restsekunden die keine ganze Stunde mehr ergeben. Dazu verwenden wir den "Modulo-Operator (%)", dieser liefert uns den Rest einer Division. Also teilen wir die Sekunden durch 60 * 60 (3600) und erhalten als Ergebnis den Rest der Division.
    $sek  = $sek % (60 * 60); //1868

    So aus diesen Restsekunden wollen wir jetzt alle vollen Minuten haben, also gehen wir gleich vor wie bei den Stunden, nur dass wir dieses mal nur noch durch 60 teilen, da ja eine Minute nur 60 Sekunden hat.
    $min  = $sek / 60; //1868/60 = 31,13333...

    Dann wieder mit intval die Nackommastellen abschneiden:
    $min = intval($min) //31

    Die Restsekunden die keine ganze Minute mehr ergaben berrechnen:
    $sek = $sek%60 //8

    Jetzt hätten wir als Ergebnis:
    1:31:8

    wir möchten aber folgendes:
    01:31:08

    Also müssen wir jeden Wert ($hour, $min, $sek) erst auf 2 Stellen "auffüllen", hierzu benutzen wir die str_pad-Funktion:
    str_pad($hour, 2, '0', STR_PAD_LEFT);

    $hour = 1
    2 = Anzahl der gewünschten Stellen
    '0' = Zeichen mit dem der "String" aufgefüllt werden soll
    STR_PAD_LEFT = Seite von der gefüllt werden soll, hier von links, d.h. die 0 soll vor die 1 geschrieben werden.

    Und da ich mir Schreibarbeit sparen wollte, hab ich diese ganzen Schritte in eine Zeile gepackt, d.h. aus:
    $hour = $sek/3600;
    $hour = intval($hour); 
    $hour = str_pad($hour, 2, '0', STR_PAD_LEFT);

    wird einfach:
    $hour =  str_pad(intval($sek / (60 * 60)), 2 ,'0', STR_PAD_LEFT);


    Ich hoffe das war jetzt verständlich genug :-)



    Beitrag zuletzt geändert: 5.7.2011 12:28:38 von alfr3d
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!