getMinutes () 0-9 - Wie werden zweistellige Zahlen angezeigt?


136
var date = "2012-01-18T16:03";
var date = new Date(date);

console.log(date.getMinutes());
console.log(date.getMinutes().length)

Dies gibt 3 zurück.

  1. Wie bringe ich es dazu, '03' zurückzugeben?
  2. Warum tut .length kehrt undefinded zurück?

Ich habe es versucht, aber es hat nicht funktioniert:

Wenn strlen == 1dannnum = ('0' + num);


Um es zusammenzufassen: Die Rückgabe von .getMinutes()ist eine Ganzzahl, auf die Sie nicht .lengthüber eine Ganzzahl zugreifen können . Um dies zu erreichen (wird beim Umgang mit Datumsangaben nicht empfohlen), wird die Zahl in eine Zeichenfolge analysiert und anschließend die Länge überprüft. ZB:date.getMinutes().toString().length
ViniciusPires

Antworten:


275
var date = new Date("2012-01-18T16:03");

console.log( (date.getMinutes()<10?'0':'') + date.getMinutes() );

2
Was bedeutet das <10?'0':''?
user1063287

@ user1063287 es ist eine Inline-if-else-Anweisung
Aryeh Armon

5
@ user1063287 Es bedeutet: "Wenn getMinutes () kleiner als 10 ist, geben Sie eine 0 zurück, wenn größer, geben Sie eine leere Zeichenfolge zurück.
Michael Giovanni Pumo


(Bedingung? wahr: falsch) In PHP können Sie die wahre Anweisung (Bedingung ?: falsch) in JS weglassen, die Sie dann verwenden würden (Bedingung || falsch). Ternärer Operator en.wikipedia.org/wiki/Ternary_operation
llange

203

Huch, diese Antworten sind nicht großartig, selbst der Top-Beitrag wurde angekreuzt. Hier y'go, browserübergreifende und sauberere Int / String-Konvertierung. Außerdem empfehle ich, keinen Variablennamen 'Datum' mit Code zu verwenden, date = Date(...)bei dem Sie sich stark auf die Groß- und Kleinschreibung der Sprache verlassen (dies funktioniert, ist jedoch riskant, wenn Sie mit Server- / Browsercode in verschiedenen Sprachen mit unterschiedlichen Regeln arbeiten). . Nehmen wir also das Javascript-Datum in einer Variablen an current_date:

mins = ('0'+current_date.getMinutes()).slice(-2);

Die Technik besteht darin, die 2 Zeichen ganz rechts (slice(-2))von "0" vor den Zeichenfolgenwert von zu setzen getMinutes(). So:

"0"+"12" -> "012".slice(-2) -> "12"

und

"0"+"1" -> "01".slice(-2) -> "01"

7
Elegante Lösung
Oldenborg

1
Die Verwendung von Slice (-2) ist nicht intuitiv, aber ich mag es.
ChrisFox

33

Eine andere kurze Möglichkeit besteht darin, die Minuten mit einer führenden Null zu füllen, indem Sie Folgendes verwenden:

String(date.getMinutes()).padStart(2, "0");

Bedeutung: Machen Sie die Zeichenfolge zwei Zeichen lang. Wenn ein Zeichen fehlt, setzen Sie 0 an dieser Position.

Siehe Dokumente unter str.padStart (targetLength, padString)


18

Elegante ES6-Funktion zum Formatieren eines Datums in hh:mm:ss:

const leadingZero = (num) => `0${num}`.slice(-2);

const formatTime = (date) =>
  [date.getHours(), date.getMinutes(), date.getSeconds()]
  .map(leadingZero)
  .join(':');

12

Ich möchte eine sauberere Lösung für das Problem anbieten, wenn ich darf. Die akzeptierte Antwort ist sehr gut. Aber ich hätte es so gemacht.

Date.prototype.getFullMinutes = function () {
   if (this.getMinutes() < 10) {
       return '0' + this.getMinutes();
   }
   return this.getMinutes();
};

Nun, wenn Sie dies verwenden möchten.

console.log(date.getFullMinutes());

10

Ich schlage vor:

var minutes = data.getMinutes();
minutes = minutes > 9 ? minutes : '0' + minutes;

Es ist ein Funktionsaufruf weniger. Es ist immer gut, über Leistung nachzudenken. Es ist auch kurz;


4

Sie sollten überprüfen, ob es weniger als 10 ist ... und nicht nach der Länge suchen, da dies eine Zahl und keine Zeichenfolge ist


4

Andere Option:

var dateTime = new Date();
var minutesTwoDigitsWithLeadingZero = ("0" + dateTime.getMinutes()).substr(-2);

Ich mag diese Lösung, aber es scheint, dass IE8 und frühere Versionen keine negativen Zahlen für unterstützen substr. w3schools.com/jsref/jsref_substr.asp
GtEx


3

.lengthist undefiniert, weil getMinuteseine Zahl zurückgegeben wird, keine Zeichenfolge. Zahlen haben keine lengthEigenschaft. Du könntest es tun

var m = "" + date.getMinutes();

um es einen String zu machen, dann die Länge überprüfen (Sie würden für überprüfen möchten length === 1, nicht 0).


3

Zahlen haben keine Länge, aber Sie können die Zahl einfach in eine Zeichenfolge konvertieren, die Länge überprüfen und bei Bedarf die 0 voranstellen:

var strMonth = '' + date.getMinutes ();
if (strMonth.length == 1) {
  strMonth = '0' + strMonth;
}}

3

Ich sehe hier keine ES6-Antworten, daher werde ich eine mit StandardJS-Formatierung hinzufügen

// ES6 String formatting example
const time = new Date()
const tempMinutes = new Date.getMinutes()
const minutes = (tempMinutes < 10) ? `0${tempMinutes}` : tempMinutes

3

Ich gehe davon aus, dass Sie den Wert als Zeichenfolge benötigen würden. Sie können den folgenden Code verwenden. Es wird immer zurückgegeben, und Sie erhalten die zweistelligen Minuten als Zeichenfolge.

var date = new Date(date);
var min = date.getMinutes();

if (min < 10) {
min = '0' + min;
} else {
min = min + '';
}
console.log(min);

Hoffe das hilft.


1

Normalerweise benutze ich diesen Code:

var start = new Date(timestamp),
    startMinutes = start.getMinutes() < 10 ? '0' + start.getMinutes() : start.getMinutes();

Es ist der von @ogur akzeptierten Antwort ziemlich ähnlich, verkettet jedoch keine leere Zeichenfolge, falls 0 nicht benötigt wird. Ich bin mir nicht sicher, ob es besser ist. Nur ein anderer Weg, es zu tun!


1

Sie können Moment js verwenden:

moment(date).format('mm')

Beispiel: moment('2019-10-29T21:08').format('mm') ==> 08

hoffe es hilft jemandem


sehr schön, wenn man sowieso momentan nutzt, danke :-)
Nadine

0
$(".min").append( (date.getMinutes()<10?'0':'') + date.getMinutes() );

Neu bei JS, also war dies sehr hilfreich. Die meisten Leute haben sich dieses Problem auch neu angesehen. So habe ich es in der Div mit dem Namen "class =" min "gezeigt.

hoffe es hilft jemandem


0

Wie wäre es damit? Für mich geht das! :) :)

var d = new Date();
var minutes = d.getMinutes().toString().replace(/^(\d)$/, '0$1');

0

Eine weitere Option, um zweistellige Minuten oder Stunden zu erhalten.

var date = new Date("2012-01-18T16:03");

var minutes = date.toTimeString().slice(3, 5); 
var hours   = date.toTimeString().slice(0, 2); 


-2

Wenn Sie AngularJS in Ihrem Projekt verwenden, fügen Sie einfach $ filter ein und verwenden Sie es wie folgt:

$filter('date')(value, 'HH:mm')

Sie können die Ausgabe auch in der Vorlage formatieren. Weitere Informationen zu Filtern finden Sie hier .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.