Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Darstellung von Zeiten in Stunden:Minuten #11

Open
simonschaufi opened this issue Jul 8, 2014 · 26 comments
Open

Darstellung von Zeiten in Stunden:Minuten #11

simonschaufi opened this issue Jul 8, 2014 · 26 comments

Comments

@simonschaufi
Copy link
Contributor

Ich habe das System gefunden und bin sehr begeistert davon. Allerdings werden teilweise Daten unterschiedlich erfasst / angezeigt.

In der Übersicht für den Benutzer zum Beispiel erscheint in der "Std" Spalte: "9.83"

Es gibt keine 83 Minuten, man erkennt hier, dass das auf 100 bezogen ist, müsste aber auf 60 bezogen sein. Damit kann ich mehr anfangen.

Ebenso auch links bei Monatssaldo: "-4.74 Std." und bestimmt noch an vielen anderen Stellen...

@mh-77
Copy link
Contributor

mh-77 commented Jul 9, 2014

Das ist
    schon richtig so, in der Stundenerfassung ist es üblich die
    Zeiten nur in Stunden anzugeben mit Kommastellen und nicht in
    Stunden und Minuten.
    Es ist sonst rechnerisch viel zu kompliziert. Beispiel: 9,75 h 
    = 9 h : 45 min     9,75 h + 0,5 h = 10,25 = simple Rechnung
Am 09.07.2014 01:14, schrieb Simon
  Schaufelberger:

  Ich habe das System gefunden und bin sehr begeistert davon.
    Allerdings werden teilweise Daten unterschiedlich erfasst /
    angezeigt.
  In der Übersicht für den Benutzer zum Beispiel erscheint in der
    "Std" Spalte: "9.83"
  Es gibt keine 83 Minuten, man erkennt hier, dass das auf 100
    bezogen ist, müsste aber auf 60 bezogen sein. Damit kann ich
    mehr anfangen.
  Ebenso auch links bei Monatssaldo: "-4.74 Std." und bestimmt
    noch an vielen anderen Stellen...
  —
    Reply to this email directly or view
      it on GitHub.

@simonschaufi
Copy link
Contributor Author

Bitte seien Sie doch so lieb und übernehmen nicht den kompletten Emailtext mit in die Antwort. Danke.

Das mag wohl bei 9.75 noch einfach sein aber bei 9.83 kann ich das nicht mehr so einfach im Kopf in Minuten umrechnen. Ich fände es gut, wenn man die Ansicht konfigurieren könnte, in welchem Format man die Zeit angezeigt bekommen möchte. ich habe noch kein System gesehen, das die Zeiten auf 100 bezogen ausgibt.

@it-m-h
Copy link
Owner

it-m-h commented Jul 9, 2014

Kann ich mal in die Liste aufnehmen, da ich auch schon Anfragen diesbezüglich bekam.
Viele Grüsse
M. H.

@simonschaufi
Copy link
Contributor Author

ich kann das auch gerne selbst mal versuchen, ich bin auch php entwickler ;) Ich wollte nur mal fragen, was Sie dazu denken.
PS: die Grüße können Sie gerne weg lassen :D Das ist ein Bugtracking und keine Geschäftsemail.

@it-m-h
Copy link
Owner

it-m-h commented Jul 14, 2014

TIPP, falls Sie das implementieren möchten:
.\include\Settings\settings.txt (neue Zeile mit Titel # wert # Info)
wert sollte aufgerufen werden können mit : $_settings->_array[$zeile][0-2]
.\modules\sites_admin\admin04_settings_edit.php (zum editieren dort wo es passt HTML einfügen)
Speichern: sollte automatisch funktionieren (die anzahl der Zeilen $y wird per POST in der Class settings abgefragt)
(Später würde ich gerne die Settings mal in einem JSON speichern zudem die Settings mit Bootstrap - Menues übersichtlicher gestalten, kam aber noch nicht dazu, das fertig zu stellen)

Für die Anzeige da wird intern halt alles dezimal berechnet und es sind viele Stellen die geändert werden müssten, ich denke da lohnt sich der Aufwad kaum, aber anbei die Dateien die mir gerade einfallen im Ordner modules:
.\sites_year:
sites04_year.php
user04_year.php
.\sites_user:
user04_timetable.php
admin04_timetable.php

Dann für den Ausdruck des pdf
.\iinclude\time_funktion_pdf.php

Ich hoffe ich habe alles berücksichtigt.

@mh-77
Copy link
Contributor

mh-77 commented Jul 17, 2014

Guten
    Abend,
    In der Industrie ist es üblich die Zeiten mit Komma darzustellen
    und zu berechnen. Dies ist zum rechnen viel einfacher, vor allem
    wenn mal was nachkontrolliert werden muss oder die Zeiten in ein
    anderes System übertragen werden müssen. Jeden den ich frage,
    der mit Arbeitszeiten auf dem Job im Personalwesen zu tun hat
    bestätigt mir, dass es üblich ist die Zeiten in Stunden mit den
    Minuten Dezimal darzustellen.
    Googel mal nach Industrieminuten ;-) Von daher finde ich ist
    Smalltime perfekt wie es ist!
    Bitte ja nichts an den Berechnungen ändern! Wenn dann wie
    Vorgeschlagen die Darstellung ändern, das ist einfach zu
    realisieren und als erweiterung fänd ich es grundsätzlich gut..
    Ich würde da jetz aber nicht nur über die Settings gehen zum
    umschalten, sondern auch ein Separater Link im Menü oder so, wo
    man die Anzeige switchen kann. So kann schnell hin und her
    geswitcht werden jenachdem wie ich die Anzeige gerade möchte
    oder brauche.
    LG 
Am 09.07.2014 19:54, schrieb Simon
  Schaufelberger:

  Bitte seien Sie doch so lieb und übernehmen nicht den
    kompletten Emailtext mit in die Antwort. Danke.
  Das mag wohl bei 9.75 noch einfach sein aber bei 9.83 kann ich
    das nicht mehr so einfach im Kopf in Minuten umrechnen. Ich
    fände es gut, wenn man die Ansicht konfigurieren könnte, in
    welchem Format man die Zeit angezeigt bekommen möchte. ich habe
    noch kein System gesehen, das die Zeiten auf 100 bezogen
    ausgibt.
  —
    Reply to this email directly or view
      it on GitHub.

@peterbeck
Copy link

Hallo zusammen,

ich habe Smalltime auch jemandem vorgeschlagen (ohne es gross zu kennen), auch dort wurde ziemlich schnell bemerkt, dass die Stunden auf 100 und nicht 60 bezogen sind. Eine Option, dies umzustellen wäre sicherlich angenehm...

Gruss

@it-m-h
Copy link
Owner

it-m-h commented Feb 25, 2015

Guten Tag Herr Beck.
In der Industrie wird in dezimal gerechnet.
Ich habe schon mehrere Anfragen diesbezüglich und habe das in meine ToDo
eingefügt.
Viele Grüsse
M.Heizmann

Am 25. Februar 2015 01:18:54 schrieb Peter Beck [email protected]:

Hallo zusammen,

ich habe Smalltime auch jemandem vorgeschlagen (ohne es gross zu kennen),
auch dort wurde ziemlich schnell bemerkt, dass die Stunden auf 100 und
nicht 60 bezogen sind. Eine Option, dies umzustellen wäre sicherlich
angenehm...

Gruss


Reply to this email directly or view it on GitHub:
#11 (comment)

@thegass
Copy link

thegass commented Dec 29, 2016

ich habe das problem für unsere installation wie folgt gelöst:

in include/time_funktionen.php eine funktion hinzugefügt:

function convertFloatToHHMM($in){
	$hh=(int) $in;
	$mm=fmod((float)$in, 1);
	$format='%02d:%02d';
	if (($hh<0)&&($mm<0)){
		$mm=abs($mm);
	}
	if (($hh>=0)&&($mm<0)){
		$mm=abs($mm);
		$format='-%02d:%02d';
	}
	return sprintf($format, $hh, $mm * 60);
}

und dann an stellen an denen ich HH:MM anstatt der Dezimalwerte sehen will diese Funktion ein die Ausgabe eingebunden

z.B. in modules/sites_user/user04_timetable.php

//-------------------------------------------------------------------------
        // Fusszeile mit den Summen
        //-------------------------------------------------------------------------
        ?>
        <tr>
                <td COLSPAN=3 class=td_background_info width=70 align=center></td>
                <td COLSPAN=<?php echo $t; ?> class=td_background_info width=550 align = left>Sollstunden :
                        <?php
                        echo convertFloatToHHMM($_monat->_SummeSollProMonat); ?> Std.</td>
                <td class=td_background_info width=40 align=center><?php if($_monat->_SummeWorkProMonat>0) echo convertFloatToHHMM($_monat->_SummeWorkProMonat) ?></td>
                <td class=td_background_info width=40 align=center><?php
                        if($_monat->_SummeSaldoProMonat>0){
                                echo convertFloatToHHMM(number_format($_monat->_SummeSaldoProMonat, 2, '.', ''));
                        }elseif($_monat->_SummeSaldoProMonat<0){
                                echo "<font class=minus>". convertFloatToHHMM(number_format($_monat->_SummeSaldoProMonat, 2, '.', '')). "</font>";
                        }
                        ?>
                </td>
                <td COLSPAN=<?php echo $a; ?> class=td_background_info width=50 align=center><?php echo convertFloatToHHMM($_monat->_SummeAbsenzProMonat)?></td>
                <?php
                if($_settings->_array[18][1]) echo "<td class=td_background_info width=16 align=center> </td>";
                ?>
        </tr>

@DKeppi
Copy link

DKeppi commented Aug 3, 2018

In modules/sites_user/user03_stat.php zB.:

Zeile 60:
echo "<td class=td_background_tag align=left>".convertFloatToHHMM(number_format($_jahr->_saldo_t, 2, '.', ''))." Std.</td>";

Zeile 87:
echo "<td class=td_background_tag align=left>".convertFloatToHHMM(number_format($_monat->_SummeSaldoProMonat, 2, '.', ''))." Std.</td>";

@DKeppi
Copy link

DKeppi commented Aug 3, 2018

Gleiches in einigen Zeilen in /modules/sites_year/user04_year.php

@DKeppi
Copy link

DKeppi commented May 29, 2019

Leider zeigt es mir in der /modules/sites_year/user04_year.php also in der Jahresübersicht keine Minuswerte an, dort steht dann 00:00 :(

@DKeppi
Copy link

DKeppi commented May 29, 2019

Habs hinbekommen, muss zB. lauten

. convertFloatToHHMM(number_format($anzeige[$year]['Summ']['Saldo'], 2, '.', '')) .

@DKeppi
Copy link

DKeppi commented May 5, 2020

Falls Interesse besteht kann ich gerne meine veränderten Files zur Verfügung stellen.
Es ist dort durchgehend kein Dezimal mehr, sondern nur mehr Std:Min. mit der oben genannten Funktion.

Die commits der letzten Monate/Jahre habe ich manuell ebenfalls mit rein genommen.
Ein Update ist ja nicht mehr möglich, da es alles retour auf Dezimal bringen würde!

@l1ngu
Copy link

l1ngu commented Jun 16, 2020

Hallo DKeppi,

ich interessiere mich für die geänderten Files.
Ich würde mich freuen.
MfG

Falls Interesse besteht kann ich gerne meine veränderten Files zur Verfügung stellen.
Es ist dort durchgehend kein Dezimal mehr, sondern nur mehr Std:Min. mit der oben genannten Funktion.

Die commits der letzten Monate/Jahre habe ich manuell ebenfalls mit rein genommen.
Ein Update ist ja nicht mehr möglich, da es alles retour auf Dezimal bringen würde!

@DKeppi
Copy link

DKeppi commented Jun 19, 2020

Hier meine Files!
Habe vorab noch meine User aus dem Data Verzeichnis entfernt und den Admin auf Standard gestellt.

smalltime.zip

@l1ngu
Copy link

l1ngu commented Jun 20, 2020

Perfekt, vielen Dank!!

@ChrisSka
Copy link

Hallo zusammen,

ich habe die modifizierten Dateien von DKeppi verwendet, nur habe ich da leider ein kleines Rechenproblem.

Ich hänge mal zwei Screenshots ran, um das genauer zu erläutern.
Mal rechnet es richtig und mal wird mir immer eine Minute abgezogen.
Habt ihr vielleicht eine Idee woran das liegen könnte?

Gruss ChrisSka

Juni
Juli

@DKeppi
Copy link

DKeppi commented Nov 30, 2021

Hab dieselben Probleme mit der Rundung, mal ist es 1 Minute zu viel, mal eine zu wenig.

Zudem habe ich soeben bemerkt, dass ich bei den auszuzahlenden Stunden nur ganze Stunden angeben kann.
Um meine Jahressumme auf 0 zu bringen, müsste ich aber zB. 80:10 eingeben können, oder zumindest 80,16
Klappt leider beides nicht!

@it-m-h
Copy link
Owner

it-m-h commented Nov 30, 2021 via email

@DKeppi
Copy link

DKeppi commented Nov 30, 2021

Perfekt :)

image

@ChrisSka
Copy link

ChrisSka commented May 2, 2022

Hallo zusammen,

Hat vielleicht jemand das Problem mit dem Rechenproblem irgendwie lösen können?

Auch ein Zusatz in der Function convertFloatToHHMM bei dem Befehl
$mm=abs($mm);
Ein + 0.01 hat leider keine Auswirkung
-> $mm=abs($mm) + 0.01;

@it-m-h
Copy link
Owner

it-m-h commented May 3, 2022

Bei den Anzeigen (z.B. admin04.timetable.php : Zeile 89 usw.)
echo GetTimeHM(number_format($_monat->_MonatsArray[$z][13], 2, '.', ''));

// Funktion für die Darstellung in h:m (z.B. in include/time_funktionen.php integrieren)
function GetTimeHM($time)
{
$time = explode('.', $time);
$min = round($time[1] / 100 * 60, 0);
$min = str_pad($min, 2, "0", STR_PAD_LEFT);
return $time[0] . ':' . $min;
}

// Tooggle Darstellung per GET?
// ----------------------------------------------------------------------------
// TOGGLE -> Time Dezimal or h:min
// ----------------------------------------------------------------------------
if (!isset($_COOKIE["time"])) {
setcookie("time", 0, time() + (3600 * 1000));
}

if (isset($_GET['ToggleTime'])) {
if ($_COOKIE["time"] == 0) {
setcookie("time", 1, time() + (3600 * 1000));
return 1;
} else {
setcookie("time", 0, time() + (3600 * 1000));
return 0;
}
}

Sollte eigentlich dann funktionieren und könnte per GET umgeschaltet werden.

@ChrisSka
Copy link

ChrisSka commented May 4, 2022

Hallo,

habe die "function GetTimeHM($time)" in time_funktionen.php integriert und die Einträge
erstmal in der admin04_timetable.php abgeändert.
Die Summe pro Tag passen erstmal.
Aber das Monatsgesamtergebnis ganz unten in der Tabelle sollte eigentlich die Summe der obigen Werte ermitteln, da passt das Ergebnis leider nicht.
Da kann ich nicht die Funktion GetTimeHM verwenden, da ich dort nicht in einem Array bin. Oder liege ich da irgendwie falsch?

Wie integriere ich die Funktion GetTimeHM, wenn er nicht in einem Array ist?
z.B bei der PDF-Ausgabe. Dort wird er momentan mit -> convertFloatToHHMM(number_format($_jahr->_saldo_t));
ausgegeben und somit falsch wie vorher.

Den zweiten Teil mit dem Toggle hab ich nicht ganz verstanden? Muss der auch in die time_funktionen.php mit rein oder wo muss der hin bzw brauch in den für die HH:MM Anzeige überhaupt?

@it-m-h
Copy link
Owner

it-m-h commented May 4, 2022

Salü, vermutlich meinst Du in der Datei Zeile 146 oder 148.
Diese zeigt ja die Zeit in z.B. 5.75 an:
number_format($_monat->_SummeSaldoProMonat, 2, '.', '');
und 5:45 sollte augegeben werden mit (sollte es auf jeden Fall, ohne das geprüft zu haben)
GetTimeHM(number_format($_monat->_SummeSaldoProMonat, 2, '.', ''));

Die Saldi und Berechnungen sind hier in der Klasse: $_monat)
PDF das selbe: $_jahr->_saldo_t da ist das ganze in dezimal

Toggle = Schalter zwischen 0 und 1
also, wenn 0 dann setzte 1, wenn 1 dann setze 0
$_GET['ToggleTime'] = GET Variable vorhanden, Schalter umlegen
z.B. admin.php**?ToggleTime** oder admin.php?xxxxxxxxxxxxxxxxxxxxxxxx**&ToggleTime**

Jetzt könnte die Funktion dann noch erweitert werden, wenn das Cookie 1 ist, dass die Zeit in h:min angezeigt wird
function GetTimeHM($time)
{
if ($_COOKIE["time"]) {
$time = explode('.', $time);
$min = round($time[1] / 100 * 60, 0);
$min = str_pad($min, 2, "0", STR_PAD_LEFT);
return $time[0] . ':' . $min;
} else {
return $time;
}
}

In etwa in der Art, aber es ist an vielen Stellen umzuprogrammieren. Leider auch Texte in der Klasse vom Monat (z.B. Ferienberechnungen usw. )
Ist sehr viel Arbeit, viel Vergnügen.
Ich würde mir überlegen nur die Monatsansicht, also die Tageszeiten umzusetzen ;)

@ChrisSka
Copy link

ChrisSka commented May 6, 2022

Guten Abend zusammen,

habe es mir leichter gemacht und die neue Function "GetTimeHM" in die vorhandene Function "convertFloatToHHMM($in)" eingefügt und das alte rausgelöscht. Somit spare ich mir die Änderungen in den Dateien.
Funktioniert alles soweit.

Habe nur noch ein paar Kleinigkeiten wo ich einfach nicht weiter komme.

  1. Problemfall:
    Nach Änderungen von Dezimal in HH:MM rechnet er mir die vorhandenen Zeiten einfach nicht nochmal neu.
    Kann man da irgendwie eine Neuberechnung anstossen oder bleibt mir nichts anderes übrig als alle Daten löschen und neu einzugeben? Ab April rechnet es richtig, davor so wie auf dem Screenshot.
    timetable

1. Update
Gebe gerade auch ältere Monate ein. Dort werden die Monate entweder richtig berechnet oder es weicht immer so eine Minute ab, entweder runter oder hoch.
Habe mir auch die Timestamps konvertiert, um zusehen ob da irgendwelche Daten nicht stimmen, hatte eher an Sekunden gedacht, sodass hier hoch- bzw. abgerundet wird. Aber leider nicht der Fall.
Ändere ich eine Stempelzeit um eine Minute. so sollte es ja dann passen, aber NEIN, es werden dann 2 Minuten abgezogen
--> Gesamtzeit liegt bei 160:31 ; nach Änderung um eine Minute steht dann 160:29

2. Update
Habe in der Function den letzten Parameter auf 1 gesetzt. ->$min = round($time[1] / 100 * 60, 1);
Dann erhalte ich nach der Zeitangabe eine Kommastelle, z.B. 8:55.2
Daher entstehen wahrscheinlich diese Rechenfehler. Diese Kommastellen erhalte ich nur bei Stempelzeiten die nicht im 15min Schritten liegen (xx:15,xx:30,xx:45,xx:00)
Beispielstempelzeit xx:50 -> x:25.2; xx:55 -> x:34.8

  1. Problemfall:
    In der PDF-Ausgabe nimmt er mir das convert.... nicht so wirklich ab. Teilweise funktioniert es mit dem Befehl convert(number_format...., teilweise nimmt er das number_format nicht an und zeigt mir eine weisse Seite.
    Und die Summen zeigt er mir auch nicht richtig an.
    Sollstunden sollte 42:30 erscheinen, tauscht mir aber die letzten Zahlen, genauso wie bei Gesamtüberstunden, 3:03 anstatt 3:30
    Und bei Tagen ohne Werte, also Wochenende, Feiertage und noch nicht erreichte Tage fehlt mir die erst 0 (Null)

So stehts bei mir in der time_funktionen_pdf.php:
$pdf->Cell(72,5,"Sollstunden: " . convertFloatToHHMM($_monat->_SummeSollProMonat) . " Std.",1,'','L', '1');
$pdf->Cell(13,5,convertFloatToHHMM($_monat->_SummeWorkProMonat),1,'','C', '1');
$pdf->Cell(13,5,convertFloatToHHMM($_monat->_SummeSaldoProMonat),1,'','C', '1');
$pdf->Cell(14,5,convertFloatToHHMM($_monat->_SummeAbsenzProMonat),1,'','C', '1');

Füge ich hier bei Sollstunden das number_format ein, erhalte ich eine weisse Seite.
Bei den anderen 3, wird der Zellhintergrund weiss und die Zeit aufgerundet, also 3:30 wird zu 4:00

Echt komisch. Mit PDF erstellen in PHP bin ich leider noch nicht so erfahren, wie man sieht ;-)

pdf

pdf2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

8 participants