Javascript Fuzzy-Zeit (z. B. '10 Minuten '), die in genauen Sekunden ist

8

Ich mache einen Javascript-Zähler, der vor 'Sekunden' zählt. Ich habe meine Zeit in einem JS-Zeitobjekt, und ich fand einen "Zeitunterschied" -Funktions-Snippet hier auf dem Stapelüberlauf, aber er zeigt "vor 2 Stunden" an. Wie kann ich "5 Stunden, 10 Minuten und 37 Sekunden" anzeigen?

Hier ist, woran ich arbeite:

Diese Funktion konvertiert die aktuelle Zeit und den Zeitstempel von etwas in "vor 20 Sekunden" anstelle eines kryptischen Datums:

%Vor%

Und hier verwende ich, um jede Sekunde die Zeit zu zählen. Ich möchte es sagen "5 Stunden, 3 Minuten, 10 Sekunden" und dann 1 Sekunde später, "5 Stunden, 3 Minuten, 11 Sekunden"

%Vor%

Die Variable newTime ist die Zeit im UTC-Javascript-Datumsformat. relTime ist das im "Sekunden her" -Format. Das Intervall durchläuft eine Reihe von Timestamp-Elementen und wählt für jeden Zeitstempel die richtige aus. Dann fügt es eine Sekunde zu der Zeit hinzu, konvertiert sie zurück in "unscharfe Zeit" (Sekunden zuvor), ersetzt das HTML durch die neue Zeit und protokolliert es in der Konsole.

Wie ändere ich "5 Stunden" in "5 Stunden, 37 Minuten, 10 Sekunden"? Die Zeitdifferenzfunktion muss geändert werden.

    
alt 13.07.2012, 22:27
quelle

3 Antworten

6

Hier ist eine Funktion, die Ihrem Wunsch sehr nahe kommt.

%Vor%

Ergebnisse:

%Vor%

Ich habe es "naiv" genannt, weil es der menschlichen Art, wie wir Zeit berechnen, nicht wirklich Beachtung schenkt. Wenn es "1/1/2013 12:01:00" genau ist, sollte der Vergleich mit "01.01.2012 12:01:00" "1 Jahr, 0 Monate, 0 Tage, 0 Stunden, 0 Minuten" ergeben , Vor einer Sekunde ". Aber das geht nicht, indem Sie die Logik in der Funktion, die Sie vorgestellt haben, erweitern, und das wird es auch nicht in meiner Funktion tun (plus meine Funktion wird keine Monate verwenden). Eine bessere Annäherung der Jahre als 365 Tage ist 365,24, aber das wird auch ignoriert.

Ich habe die leeren Zeitteile wie gewünscht weggenommen und dabei "0 Sekunden" gelassen, wenn keine Zeitteile gefunden wurden.

Nun, wenn Sie diese menschenähnliche Art des Rechnens wollen, müssen Sie einige Dinge entscheiden. Sie können nicht einfach die Grenzen überschreiten, da der 28. Februar bis 1. März kein ganzer Monat ist. Zweitens, hier ist eine Frage wird das wahre Problem aufdecken:

  • Wie viele Monate und Tage ist der 2. Februar bis 31. März?

Wenn Sie den 2. Februar bis 2. März als einen Monat berechnen, dann sind es 1 Monat und 29 Tage. Aber was, wenn es vom 2. Januar bis zum 1. März wäre? Das ist die gleiche Anzahl von Tagen, die zwischen ihnen verstrichen sind. Ist das jetzt 1 Monat (für den gesamten April) + 1 Tag im März + die 31 Tage im Januar für 1 Monat 32 Tage? Möchtest du, dass deine Monate mit einem physischen Kalender übereinstimmen, so dass ein Mensch mit seinem Finger zurückverfolgen kann und das richtige Datum rausbekommt? Das ist viel schwieriger als Sie denken.

Wenn Sie mit vernünftigen und vollständigen Regeln darüber antworten können, wie Sie "menschenähnliche, verstrichene Zeit" berechnen würden, dann könnte ich Ihnen vielleicht eine andere Funktion schreiben, um das zu tun.

Aktualisieren

Hier ist eine neue Funktion, die Monate macht und 365.24 Tage in einem Jahr hat (30.43666666 Tage in einem Monat):

%Vor%

Ausgabe:

%Vor%

Es ist immer noch naiv, aber es macht einen etwas besseren Job. Plus es wird für wirklich alte Daten wie B.C. Einsen. :)

    
ErikE 13.07.2012 23:16
quelle
2

Ändere die Logik so, dass sie nicht nur die einzelne größte Maßeinheit finden kann, sondern auch etwas mit dem Rest.

Grundsätzlich müssen Sie mit dem größten Inkrement beginnen, den Wert finden und ihn dann von der Summe subtrahieren, um den Rest zu erhalten. Dann wiederhole es.

So etwas vielleicht, ich habe es nicht getestet.

%Vor%

Dann bauen Sie einfach Ihre Zeichenfolge aus den Variablen.

    
Brandon 13.07.2012 22:38
quelle
0

Dies sollte den Trick machen:

%Vor%

Ausgabe: 8 Monate, 12 Tage, 1 Stunde, 45 Minuten und 47 Sekunden zuvor

Dies könnte natürlich umgestaltet werden, um etwas weniger repetitiv zu sein. In der Tat Sie können diese Geige ausprobieren, wenn sie funktioniert: Ссылка

    
Kieran 13.07.2012 23:06
quelle

Tags und Links