Mit Timestamps rechnen

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

  • Mit Timestamps rechnen

    Hallo zusammen!

    Ich suche mal wieder nach klugen Köpfen, die mir helfen können.

    Ich möchte automatisiert die Arbeitszeiten von Angestellten auswerten. Gespeichert wird jeden Tag der Timestamp der Anfangs- und der Timestamp der Endzeit. Um Wochenend-Zuschläge zu errechnen, muss ich nun die Arbeitsstunden am Sonntag (0:00 bis 24:00) errechnen.

    Die Gesamt-Stunden des Arbeitstages kann ich leicht errechnen:
    Code:
    <?php
    //Angefangen am Samstag, 2.April 2010 um 20:00 Uhr
    $von_timestamp = mktime(20,0,0,4,2,2010);
    //Aufgehört am Sonntag, 3. April 2010 um 04:00 Uhr
    $bis_timestamp = mktime(4,0,0,4,3,2010)
    
    $gesamt_stunden = ($bis_timestamp-$von_timestamp)/(60*60);
    ?>
    Die Fragestellung ist jetzt: Wie viele Stunden der Gesamtstunden fielen auf einen Sonntag? Im Beispiel sind es also 4.

    Habt ihr Ideen?

    Grüße, Jenny

    [EDIT]
    Um das Problem (etwas) zu vereinfachen: Ebenso muss ich den Nachtzuschlag berechnen. Wie viele Stunden fallen in den Korridor 22:00 bis 06:00? Die Herangehensweise wird ähnlich sein, jedoch ist es leichter, vorzustellen. Im Obigen Beispiel (20:00 bis 4:00 Uhr gearbeitet) müsste ich also 6 Stunden herausbekommen.
    Zuletzt geändert von Zumm; 04.04.2011, 04:46.

  • #2
    Hallo,

    ich würde mir da eine Ereignistabelle aufbauen, in deren erster Spalte der Zeitstempel steht und deren weitere Spalten für alle Arten von Zeitabschnitten stehen:

    Zeitstempel | Arbeitszeit | Nacht | Sonntag | ...

    In diese Spalten trägst du z. B. true ein, wenn der Abschnitt beginnt, false wenn er endet und null, wenn sich nichts ändert. Hier ein Beispiel mit Kommentaren in der letzten Spalte und weggelassenen null-Werten:

    Code:
    +-------------+-------------+-------+---------+----------------------------------------------------+
    | Zeitstempel | Arbeitszeit | Nacht | Sonntag | Kommentar                                          |
    +-------------+-------------+-------+---------+----------------------------------------------------+
    | 1301760000  | true        |       |         | Samstag 18:00, Schicht beginnt                     |
    | 1301774400  |             | true  |         | Samstag 22:00, Nachtzuschlag beginnt               |
    | 1301781600  |             |       | true    | Sonntag 00:00, Sonntagszuschlag beginnt            |
    | 1301788800  | false       |       |         | Sonntag 02:00, Schicht endet                       |
    | 1301803200  |             | false |         | Sonntag 06:00, Nachtzuschlag endet                 |
    | 1301868000  |             |       | false   | Montag 00:00, Sonntagszuschlag endet               |
    +-------------+-------------+-------+---------+----------------------------------------------------+
    Durch die aufsteigende Sortierung kannst du immer die Differenz zwischen zwei Zeilen ermitteln und anhand der Werte in den weiteren Spalten entscheiden, was du mit dieser Differenz anstellst.

    Gruß,

    Amica
    Zuletzt geändert von AmicaNoctis; 04.04.2011, 11:34.
    [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


    • #3
      Hi!

      So habe ich es gelöst:

      Code:
      <?php
      $beginn_sonntagsstunden = strtotime("sunday 00:00", $von_timestamp);
      $ende_sonntagsstunden = strtotime("+24 hours", $beginn_sonntagsstunden);
      
      if ($von_timestamp > $ende_sonntagsstunden || $bis_timestamp < $beginn_sonntagsstunden)
      //Falls Arbeitszeit nicht im Sonntagsstunden-Korridor
      {
      	$sonntagsstunden = 0;
      } else
      {
      	if ($von_timestamp > $beginn_sonntagsstunden)
      		$beginn_sonntagsstunden = $von_timestamp;
      	if ($bis_timestamp < $ende_sonntagsstunden)
      		$ende_sonntagsstunden = $bis_timestamp;
      	$sonntagsstunden = ($ende_sonntagsstunden-$beginn_sonntagsstunden)/(60*60);
      }
      ?>

      Kommentar


      • #4
        Du arbeitest nur mit > und <. Wenn der Zufall mal blöd mitspielt und Gleichheit herrscht, hast du ein Problem.
        [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

        Lädt...
        X