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);

Mark Fondy
quelle
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() );
ogur
quelle
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"
Bam Bam
quelle
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)

Kai Noack
quelle
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(':');
sf77
quelle
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());
KapteinMarshall
quelle
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;

user2846569
quelle
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

Yaron U.
quelle
4

Andere Option:

var dateTime = new Date();
var minutesTwoDigitsWithLeadingZero = ("0" + dateTime.getMinutes()).substr(-2);
IanGSY
quelle
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
4

Weitere Informationen zur Verwendung der ECMAScript Internationalization API :

const twoDigitMinutes = date.toLocaleString('en-us', { minute: '2-digit' });
Hamid Mosalla
quelle
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).

hvgotcodes
quelle
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;
}}
Glenn
quelle
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
Jordan Papaleo
quelle
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.

Andrew L.
quelle
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!

JRMLSTF
quelle
1

Sie können Moment js verwenden:

moment(date).format('mm')

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

hoffe es hilft jemandem

mir
quelle
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

Jason Teunissen
quelle
0

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

var d = new Date();
var minutes = d.getMinutes().toString().replace(/^(\d)$/, '0$1');
Yuri M.
quelle
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); 
Kasper Kamperman
quelle
-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 .

eso32
quelle