Wie verwende ich .toLocaleTimeString (), ohne Sekunden anzuzeigen?

162

Ich versuche gerade, die Zeit des Benutzers anzuzeigen, ohne die Sekunden anzuzeigen. Gibt es eine Möglichkeit, dies mit .toLocaleTimeString () von Javascript zu tun?

So etwas machen:

var date = new Date();
var string = date.toLocaleTimeString();

zeigt die Zeit des Benutzers mit jedem Gerät an, z. B. zeigt es derzeit 3:39:15 PM an. Kann ich dieselbe Zeichenfolge nur ohne Sekunden anzeigen? (zB 15.39 Uhr)

javadog36
quelle

Antworten:

316

Sie können jederzeit die Optionen festlegen, basierend auf dieser Seite, die Sie festlegen können, um die Sekunden loszuwerden

var dateWithouthSecond = new Date();
dateWithouthSecond.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});

Unterstützt von Firefox, Chrome, IE9 + und Opera. Probieren Sie es in Ihrer Webbrowser-Konsole aus.

CJLopez
quelle
2
Danke, ich habe stundenlang nach dieser Antwort gesucht.
MustafaP
5
Zu Ihrer Information hour: "2-digit", ich arbeite nicht für mich in Chrome 42 oder FF 37 --- d = new Date(1429524912495).toLocaleTimeString('en-US', {hour: '2-digit', minute: '2-digit', hour12: true})kehrt "6:15 AM"in beiden zurück.
user9645
16
Verwenden Sie []diese Option, um ein bestimmtes Gebietsschema wegzulassen. Auf diese Weise bleiben Sie beim Gebietsschema des Benutzers:toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'}
Hafenkranich
12
arbeitet in Chrom 51:new Date().toLocaleTimeString([], {hour: '2-digit', minute:'2-digit', hour12: false}); "17:08"
Rofrol
1
Ja, es ist 4 Jahre her, seit ich das hier gepostet habe, so viele Dinge haben sich geändert. Kein Wunder, dass Sie es nicht mehr angeben müssen. Grüße
CJLopez
10

Das funktioniert bei mir:

var date = new Date();
var string = date.toLocaleTimeString([], {timeStyle: 'short'});
Floris Looijesteijn
quelle
6
Es ist erwähnenswert, dass die timeStyle-Option ab März 2020 nur in Chrome und Opera unterstützt wird und nicht in Firefox, Edge / IE und Safari. Wenn Sie eine breite Abdeckung wünschen, ist es wahrscheinlich besser, sich vorerst an die Stunden- und Minutenoptionen zu halten.
Sanddorn
Für Safari / iOS funktioniert dies nur in den USA, wo Sie AM / PM haben. en-US zeigt 15:16 Uhr an, andere Ländereinstellungen 15:16:00.
PassKit
8

Der von Date.prototype.toLocaleString zurückgegebene Wert ist implementierungsabhängig, sodass Sie das erhalten, was Sie erhalten. Sie können versuchen, die Zeichenfolge zu analysieren, um Sekunden zu entfernen. In verschiedenen Browsern kann dies jedoch unterschiedlich sein, sodass Sie jeden verwendeten Browser berücksichtigen müssen.

Das Erstellen eines eigenen, eindeutigen Formats ist mit Datumsmethoden nicht schwierig. Beispielsweise:

function formatTimeHHMMA(d) {
  function z(n){return (n<10?'0':'')+n}
  var h = d.getHours();
  return (h%12 || 12) + ':' + z(d.getMinutes()) + ' ' + (h<12? 'AM' :'PM');
}
RobG
quelle
7
Analysieren Sie NICHT die von toLocaleTimeString zurückgegebene Zeichenfolge. Ich war seit ein paar Jahren ohne Probleme. Aber dann habe ich heute bemerkt, dass es nicht funktioniert hat. Es stellt sich heraus, dass es spezielle Unicode-Zeichen gibt (z. B. 0x200E, eine Markierung von links nach rechts), die von Date.parse nicht verarbeitet werden können. Ich habe das nie kommen sehen. Also werde ich aufhören, alle Gebietsschemafunktionen zu verwenden, und einfach meine eigenen zeitformatierten Zeichenfolgen erstellen. Das wird mich vor bösen Überraschungen wie dieser bewahren.
Gabe Halsmer
@ GabeHalsmer - Ich empfehle und habe Date.parse nicht empfohlen, Zeichenfolgen zu analysieren (z. B. den letzten Absatz hier ). Aber das ist hier irrelevant, es wird überhaupt nicht erwähnt, Sie haben die Antwort falsch verstanden, wenn Sie glauben, dass dies der Fall ist (z. B. " Sie können versuchen zu analysieren ...").
RobG
Netter Link. Zusammenfassend muss man also entweder seine eigene Analyse oder seine eigene ToString-Methode erstellen, da Date.prototype.toLocalString und Date.parse grundsätzlich nicht kompatibel sind. Einen ToString zu machen schien mir am einfachsten zu sein. Aber Sie haben Ihre eigene Analyse implementiert. Also wird beides für Menschen funktionieren. Das Wesentliche, worauf ich alle aufmerksam machen wollte, war, dass Date.parse nicht mit toLocaleString funktioniert. Und ich habe Stunden gebraucht, um diese Inkompatibilität aufzuspüren, weil sie so subtil war. Die Markierungen von links nach rechts sind im Debugger von Visual Studio nicht sichtbar.
Gabe Halsmer
Cool, eine weitere völlig fehlgeleitete Abstimmung. Kein Wunder, dass die Leute ihnen nicht ihren Namen geben wollen.
RobG
Für die Speicherung und den Transport von Daten in andere Formate bieten toISOString und getTime wahrscheinlich das sicherste Datumsformat für die erneute Analyse. Mir ist keine JS-Implementierung im letzten Jahrzehnt bekannt, die die von getTime zurückgegebene Millisekunden-Version von UTC nicht verarbeitet hat, und ISO-Werte sind auch in den Spezifikationen als analysierbares Datumsformat für eine lange Zeit enthalten. Lesen Sie jedoch niemals Daten von UI-Elementen zurück. Das sollte von deiner App-Ebene kommen. Und immer in Safari testen. Es waren Idioten auf IE6-Ebene über das Datumsobjekt.
Erik Reppen
7

Mit Gebietsschemas:

var date = new Date();
date.toLocaleTimeString('fr-FR', {hour: '2-digit', minute: '2-digit'})
Mickael Austoni
quelle
0

Ich habe auch nach einer Lösung für dieses Problem gesucht. Folgendes habe ich mir schließlich ausgedacht:

function getTimeStr() {
    var dt = new Date();
    var d = dt.toLocaleDateString();
    var t = dt.toLocaleTimeString();
    t = t.replace(/\u200E/g, '');
    t = t.replace(/^([^\d]*\d{1,2}:\d{1,2}):\d{1,2}([^\d]*)$/, '$1$2');
    var result = d + ' ' + t;
    return result;
}

Sie können es hier versuchen: http://jsfiddle.net/B5Zrx/

\ u200E ist ein Formatierungszeichen, das ich in einer IE-Version gesehen habe (es ist eine Unicode-Markierung von links nach rechts).

Ich gehe davon aus, dass, wenn die formatierte Zeit etwas wie "XX: XX: XX" enthält, es Zeit mit Sekunden sein muss und ich den letzten Teil entferne. Wenn ich dieses Muster nicht finde, wird nichts geändert. Ziemlich sicher, aber es besteht die Gefahr, dass unter seltsamen Umständen Sekunden verbleiben.

Ich hoffe nur, dass es kein Gebietsschema gibt, das die Reihenfolge der formatierten Zeitteile ändern würde (z. B. ss: mm: hh). Diese Markierung von links nach rechts macht mich allerdings etwas nervös, deshalb entferne ich die Markierung von rechts nach links (\ u202E) nicht - ich ziehe es vor, in diesem Fall keine Übereinstimmung zu finden und die zu verlassen Zeit in diesem Fall mit Sekunden formatiert.

ag.
quelle
1
+1 Du bist der einzige , der die Frage richtig beantwortet hat. Danke mate
mate64
1
Dies macht viele Annahmen darüber, welche toLocaleTimeString()Renditen möglicherweise nicht für alle Gebietsschemas zutreffen.
AJ Richardson
0

Sie können dies versuchen, was für meine Bedürfnisse funktioniert.

var d = new Date();
d.toLocaleTimeString().replace(/:\d{2}\s/,' ');

oder

d.toLocaleString().replace(/:\d{2}\s/,' ');
Karma
quelle
6
Dies funktioniert nicht, da andere Sprachen möglicherweise ein völlig anderes Trennzeichen verwenden als :.
Jon Koops
-2

Hier ist eine Funktion, die dies tut, mit Kommentaren, die erklären:

  function displayNiceTime(date){
    // getHours returns the hours in local time zone from 0 to 23
    var hours = date.getHours()
    // getMinutes returns the minutes in local time zone from 0 to 59
    var minutes =  date.getMinutes()
    var meridiem = " AM"

    // convert to 12-hour time format
    if (hours > 12) {
      hours = hours - 12
      meridiem = ' PM'
    }
    else if (hours === 0){
      hours = 12
    }

    // minutes should always be two digits long
    if (minutes < 10) {
      minutes = "0" + minutes.toString()
    }
    return hours + ':' + minutes + meridiem
  }

Da toLocaleTimeString (), wie andere angemerkt haben, in verschiedenen Browsern unterschiedlich implementiert werden kann, bietet diese Methode eine bessere Kontrolle.

Um mehr über das Javascript Date-Objekt zu erfahren, ist dies eine gute Ressource: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

Koanima
quelle
-2

Ich denke, die ursprüngliche Frage kann leicht beantwortet werden, indem etwas übersehen wird: ein einfacher String-Split. Die zurückgegebene Zeit ist eine Textzeichenfolge. Teilen Sie sie einfach im Trennzeichen ":" auf und setzen Sie die Zeichenfolge nach Ihren Wünschen wieder zusammen. Keine Plug-Ins, keine komplizierten Skripte. und los geht's:

var myVar=setInterval(function(){myTimer()},1000);

function myTimer() {
    var d = new Date();
    currentNow = d.toLocaleTimeString();
    nowArray = currentNow.split(':');
    filteredNow = nowArray[0]+':'+nowArray[1];
    document.getElementById("demo").innerHTML = filteredNow;
}
Frank Eastes
quelle
-3

Obwohl dies eine ältere Frage ist, hatte ich kürzlich selbst dieselbe und fand eine einfachere Lösung mit regulären Ausdrücken und der Funktion zum Ersetzen von Zeichenfolgen als weitere Alternative (keine Notwendigkeit für externe js-Bibliotheken oder Vertrauen in die ECMAScript-Internalisierungs-API). ::

var d = new Date();
var localeTime = d.toLocaleTimeString();
var localeTimeSansSeconds = localeTime.replace(/:(\d{2}) (?=[AP]M)/, " ");

Bei diesem Ansatz wird ein Regex-Look-Ahead verwendet, um das: ss AM / PM-Ende der Zeichenfolge zu erfassen, und der: ss-Teil wird durch ein Leerzeichen ersetzt, wobei der Rest der Zeichenfolge unberührt bleibt. (Wörtlich gesagt: "Suchen Sie einen Doppelpunkt mit zwei Ziffern und einem Leerzeichen, gefolgt von AM oder PM, und ersetzen Sie den Doppelpunkt, zwei Ziffern und den Leerzeichenbereich durch nur ein Leerzeichen.)

Dieser Ausdruck / Ansatz funktioniert nur für Gebietsschemas in den USA und in den USA. Wenn Sie auch ein ähnliches Ergebnis mit beispielsweise britischem Englisch (en-GB) erzielen möchten, das kein AM / PM verwendet, ist ein anderer regulärer Ausdruck erforderlich.

Basierend auf der Beispielausgabe des ursprünglichen Fragestellers gehe ich davon aus, dass sie sich hauptsächlich mit dem amerikanischen Publikum und dem Zeitschema der USA befassten.

Emu
quelle
-3

Konvertieren Sie einfach das Datum in eine Zeichenfolge und verketten Sie dann die gewünschten Teilzeichenfolgen.

let time = date.toLocaleTimeString();
console.log(time.substr(0, 4) + time.substr(7, 3))
//=> 5:45 PM
Bradley
quelle
3
Bitte fügen Sie Ihrem Beitrag eine Erklärung hinzu.
DigitCart
5
toLocaleTimeStringGibt in jedem Browser abhängig von den Ländereinstellungen unterschiedliche Zeichenfolgen zurück. Sie können sich nicht auf diese Positionen verlassen, da Sie in den Browsern anderer Personen unterschiedliche, wahrscheinlich fehlerhafte Ergebnisse erhalten.
Oriadam