• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Abgeschlossene Zeit von aktueller Stunde in Prozent

scbawik

Senior HTML'ler
Hallo Leute!

Ich habe gerade eine geistige Blockade. Betrifft nicht direkt JavaScript, sondern ist eher mathematischer Natur.

Ich versuche per JavaScript zu berechnen, wieviel Prozent der aktuellen Stunde "abgelaufen" sind. Beispiel:
1. Es ist 17:30, als Rückgabe erwarte ich daher 50 % bzw 0.5
2. Es ist 13:45, als Rückgabe erwarte ich daher 75 % bzw 0.75
3. Es ist 13:05, als Rückgabe erwarte ich daher 8.3333 % bzw 0.08333

Alles was ich bis jetzt in JS habe:

Code:
var time = Date.now();

Also nichts.

Vielleicht wäre jemand gerade so freundlich und kann mir auf die Sprünge helfen.

Vielen Dank!

LG
 
Hallo,

wenn es minutengenau sein soll ist es mathematisch ganz einfach:

60 Minuten = 100%
1 Minute = ? %

100 geteilt durch 60 mal 1 = 1,666666667 (Nachkommastellen je nach Genauigkeit)

Den Wert (1,66666667) musst du nun einfach mit der gesuchten Minutenzahl multiplizieren, also z. B.

5 = 8,33333
45 = 75

Gruss

MrMurphy
 
Danke dir für die Antwort. Vollkommen richtig, nur leider war ich schon so neben der Spur dass ich sogar die Frage falsch gestellt habe.

Ich muss mein Vorhaben genauer erklären (Bitte Post #1 ignorieren):
Code:
var positions = [
    {x:100, y:300, z:40}, // 0%
    {x:400, y:100, z:-70}, // 33.3333%
    {x:50, y:800, z:100} // 66.6666%
];
var duration = 300000; // 5 minutes in ms
var methods = {
    calculatePosition: function (now) {
        var percent = 0;
        var pos = {x:0, y:0, z:0};
            // hier weiß ich nicht weiter
        return pos;
    }
};
var elem = new Element3D ();
var interval = setInterval(function () {
   var pos = methods.calculatePosition(Date.now());
       elem.x = pos.x;
       elem.y = pos.y;
       elem.z = pos.z;
},20);

Mein Ziel ist es jetzt dass methods.calculatePosition, abhängig vom Parameter "now", die zur aktuellen Uhrzeit richtige Position für ein 3D Element zurückgibt.
Die Objekte im Array "positions" sind jeweils, wie soll ich sagen, Wegpunkte. Es können unterschiedlich viele "positions" angegeben werden.
Anhand der von mir gesuchten Prozent, soll dann anschließend der Mittelwert zwischen den "positions" berechnet werden.
Bei 50% also irgendwas zwischen positions[1] und positions[2].

Die Dauer, bis einmal die kompletten "positions" die Runde gemacht haben (also 0-100%) ist in der Variable "duration" mit 300000 Millisekunden angegeben, also 5 Minuten.

Wenn die Funktion also zum ersten mal aufgerufen wird, soll nicht bei 0% begonnen werden, sondern gemessen an der Uhrzeit die richtige Position ermittelt werden.

0 % sollten also jeden Tag um 00:00:00 Uhr, 00:05:00 Uhr, 00:10:00 Uhr, … 23:55:00 Uhr erreicht werden.
100% sollten jeden Tag um 00:04:59 Uhr, 00:09:59 Uhr, 00:14:59 Uhr, … 23:59:59 Uhr erreicht werden.
50 % sind daher in etwa bei 00:02:30 Uhr, … erreicht.

Ach Pseudo-Code ist willkommen, ich benötige wahrscheinlich nur einen kleinen Denkanstoß.

Hoffe es ist verständlich und auch lösbar was ich erreichen möchte :)

DANKE!

PS: Es geht mir jetzt mal noch nicht um die Berechnung des Mittelwertes, sondern "nur" um die Ermittlung des Prozentwertes.
 
Zuletzt bearbeitet:
Code:
var today = new Date();
today.setHours(0);
today.setMinutes(0);
today.setSeconds(0);
today.setMilliseconds(0)

var fiveMinutes = 1000 * 60 * 5;

var percent = 1 / fiveMinutes * ((new Date().getTime() - today.getTime()) % fiveMinutes);

Nun steht in "percent" ein wert von 0 - 1. Damit solltest du doch etwas anfangen können.

lg

Edit: Ok, sorry hab nicht genau gelesen. Ich suche dir eben raus was du brauchst. Ein paar minuten.

Edit 2: Hier schoneinmal ein Link der das Berechnen der Kreisposition zeigt.
http://www.mathe-online.at/lernpfade/einheitskreis/?kapitel=1
Morgen abend bekommst du eine genauere beschreibung.
Edit 3: Hier noch einmal ein Stichwort das dir bestimmt weiter helfen wird.
https://www.google.de/search?q=radiant
 
Zuletzt bearbeitet von einem Moderator:
Code:
var today = new Date();
today.setHours(0);
today.setMinutes(0);
today.setSeconds(0);
today.setMilliseconds(0)

var fiveMinutes = 1000 * 60 * 5;

var percent = 1 / fiveMinutes * ((new Date().getTime() - today.getTime()) % fiveMinutes);

Nun steht in "percent" ein wert von 0 - 1. Damit solltest du doch etwas anfangen können.

lg

Edit: Ok, sorry hab nicht genau gelesen. Ich suche dir eben raus was du brauchst. Ein paar minuten.

Edit 2: Hier schoneinmal ein Link der das Berechnen der Kreisposition zeigt.
http://www.mathe-online.at/lernpfade/einheitskreis/?kapitel=1
Morgen abend bekommst du eine genauere beschreibung.
Edit 3: Hier noch einmal ein Stichwort das dir bestimmt weiter helfen wird.
https://www.google.de/search?q=radiant

Yeah genial, das mit dem Prozentwert funktioniert wie erhofft, ich danke dir vielmals!!!

Edit 1 kann ich nicht bestätigen - das war genau das wonach ich gesucht habe.
Danke nochmal!
 
Zurück
Oben