String mit Uhrzeit und Integer addieren
WernerK
- javascript
0 Auge0 Lisa0 Rolf B0 WernerK0 Tabellenkalk
0 Gunnar Bittersmann
Hallo ,
von einer Datenbank bekomme ich die variable weekstarttime z.b. als 9:00 zurück. Sie ist als varchar gespeichert. Dann gibt es in der gleichen Tabelle die workinghours als Integer z.b. 9
Jetzt benötige ich auf der Webseite bzw. mit Javascript die Uhrzeit
18:00 also die Startzeit 9:00 plus die working hours 9
So habe ich es versucht, aber da kommt dann ja nur 18 heraus.
var maxtime = parseInt(weekstarttime, 10) + workinghours;
Wie könnte man das besser lösen?
Gruss Werner
Hallo
von einer Datenbank bekomme ich die variable weekstarttime z.b. als 9:00 zurück. Sie ist als varchar gespeichert. Dann gibt es in der gleichen Tabelle die workinghours als Integer z.b. 9
Jetzt benötige ich auf der Webseite bzw. mit Javascript die Uhrzeit
18:00 also die Startzeit 9:00 plus die working hours 9
So habe ich es versucht, aber da kommt dann ja nur 18 heraus.
var maxtime = parseInt(weekstarttime, 10) + workinghours;
Wie könnte man das besser lösen?
Der Wert von weekstarttime
(„9:00“) wird offensichtlich zu einer Zahl gemacht, damit JS damit addieren kann. JS addiert also nicht 9:00 + 9
, sondern 9 + 9
und das ist – wenig überraschend – 18
. Am besten verwendest du das JS-eigene Date-Objekt, mit dem du Datums- und Zeitwerte direkt berechnen kannst. Da lässt sich mit den passenden Funktionen hinten auch ein „echter“ Zeitwert wie 18:00
oder 18:30
herausholen.
Siehe dazu auch unser Tutorial Zeitberechnung.
Tschö, Auge
Hallo,
wie holst Du denn die Daten ab, per PHP?
lg.
Hallo Lisa,
ja per PHP.
LG
Hallo
ja per PHP.
Wenn schon während der Ausführung des PHP-Skriptes sowohl die Start- als auch die Arbeitszeit bekannt ist, kannst du die Berechnung der Feierabendzeit auch in PHP ausführen und musst das nicht dem Browser des Besuchers überlassen.
Tschö, Auge
Hallo Werner,
JavaScript kennt keinen eigenen Time-Typ, d.h. um die Datums-/Zeit-Funktionen nutzen zu können, muss immer ein Datum dabei sein. Das ist hier lästig, und nötig ist es nur dann, wenn Du Arbeitszeiten hast, während denen die Umschaltung zwischen Sommer- und Winterzeit wichtig ist.
Wenn der Zeitpunkt des Arbeitsbeginns immer als "hh:mm" geliefert wird, dann sollte es für deinen Anwendungsfall reichen, die Uhrzeit in Sekunden oder Minuten seit Mitternacht umzurechnen und die 9 Stunden darauf zu addieren (also entweder mal 2603600 oder mal 60 nehmen, je nachdem was Du beim Umrechnen tust). Das kannst Du dann durch Division und Restberechnung wieder in einen Zeit-String wandeln. Das korrekte Aufbereiten mit führenden Nullen ist unter JS etwas Fummelei, aber dafür gibt's entweder Libs die Zahlenformatierung mitbringen, die Intl.Numberformat Klasse (sogar im IE11) oder eine kleine handgemachte Funktion oder Klasse.
// Rechnet einen String im Format hh:mm oder hh:mm:ss in
// Sekunden seit Mitternacht um. GIGO-Funktion, keine Plausis!
function getTimeValue(timeString) {
var timeParts = timeString.split(':');
var timeValue = timeParts[0] * 3600;
if (timeParts.length > 1)
timeValue += timeParts[1] * 60;
if (timeParts.length > 2)
timeValue += timeParts[2] * 1;
return timeValue;
}
function withLeadingZeros(value, length) {
return value.toString().padStart(length, '0');
};
function getTimeString(timeValue, withSeconds) {
var minSec = timeValue % 3600;
var hours = Math.floor(timeValue / 3600);
var min = Math.floor(minSec / 60);
var sec = timeValue % 60;
var result = withLeadingZeros(hours, 2) + ":" + withLeadingZeros(min, 2);
if (withSeconds)
result += ":" + withLeadingZeros(timeValue % 60, 2);
return result;
}
}
Rolf
Hallo Rolf,
Danke für deine Hilfe. Ok, dann muss ich da wohl ein bischen "fummeln" :-)
Mit deinem Ansatz hoffe ich mal weiter zu kommen.
viele Grüße
Werner
Hallo,
mal 260 nehmen
Deine Stunde hat 20 Minuten mit jeweils 13 Sekunden?
Gruß
Kalk
Moin,
mal 260 nehmen
Deine Stunde hat 20 Minuten mit jeweils 13 Sekunden?
bingo! Das ist mir vor ein paar tagen auch schon aufgefallen.
Ich habe mich zwar sehr gewundert, wie Rolf auf die 260 kommt, mir aber eine Bemerkung dazu verkniffen. Vielleicht meinte er 60².
Ciao,
Martin
Hallo Tabellenkalk,
Deine Stunde hat 20 Minuten mit jeweils 13 Sekunden?
so einen Quatsch habe ich ja noch nie gehört. Es sind natürlich 60 Minuten zu 4 Sekunden, wobei jede dritte Minute eine Langminute zu 5 Sekunden ist, womit sich die 260 Sekunden ganz natürlich ergeben.
13 Sekunden, ts, wer soll denn damit zurechtkommen?
Rolf
(ich hab den Nonsense da oben mal editiert)
Hallo,
Deine Stunde hat 20 Minuten mit jeweils 13 Sekunden?
so einen Quatsch habe ich ja noch nie gehört. Es sind natürlich 60 Minuten zu 4 Sekunden, wobei jede dritte Minute eine Langminute zu 5 Sekunden ist, womit sich die 260 Sekunden ganz natürlich ergeben.
niemand hat behauptet, die Regel zur Bestimmung der Schaltminuten sei einfach!
13 Sekunden, ts, wer soll denn damit zurechtkommen?
Stimmt, so viele Finger habe ich ja gar nicht ...
So long,
Martin
@@WernerK
von einer Datenbank bekomme ich die variable weekstarttime z.b. als 9:00 zurück.
Oder z.B. als 9:30. Und schon funktioniert dein parseInt(weekstarttime, 10)
nicht; es liefert 9, nicht halb zehn.
BTW, die Basis 10 ist default, d.h. sie sollte weggelassen werden.
[Die Uhrzeit] ist als varchar gespeichert.
?? Warum nicht als time
?
Dann gibt es in der gleichen Tabelle die workinghours als Integer z.b. 9
Integer? Und wenn jemand 8½ Stunden arbeitet? Das sollte wohl float sein.
LLAP 🖖
Hallo Gunnar,
BTW, die Basis 10 ist default, d.h. sie sollte weggelassen werden.
Nein. Das Default ist „versuche das Zahlensystem zu erraten.“ Das heisst dann:
Und das ist AFAIR zumindest teilweise auch noch Implementationsabhängig. Man sollte immer die Basis angeben.
LG,
CK
Und das ist AFAIR zumindest teilweise auch noch Implementationsabhängig. Man sollte immer die Basis angeben.
ja, das mit dem Oktalsystem ist es definitiv: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt#Octal_interpretations_with_no_radix
Hallo stylus,
ja, das mit dem Oktalsystem ist es definitiv: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt#Octal_interpretations_with_no_radix
Das rauszusuchen war ich vorhin zu faul 😉 danke.
LG,
CK
@@Christian Kruse
Nein. Das Default ist „versuche das Zahlensystem zu erraten.“ […] Man sollte immer die Basis angeben.
LLAP 🖖