getMinutes () 0-9 - Jak wyświetlić liczby dwucyfrowe?

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

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

Zwraca to 3.

  1. Jak sprawić, by zwrócił „03”?
  2. Dlaczego .lengthwraca undefinded?

Próbowałem tego, ale nie zadziałało:

Jeśli strlen == 1wtedynum = ('0' + num);

Mark Fondy
źródło
Podsumowując, wynik .getMinutes()jest liczbą całkowitą, nie można uzyskać dostępu .lengthz liczby całkowitej. Aby to osiągnąć (niezalecane w przypadku dat) jest przetworzenie liczby na łańcuch, a następnie sprawdzenie długości. Np .:date.getMinutes().toString().length
ViniciusPires

Odpowiedzi:

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

console.log( (date.getMinutes()<10?'0':'') + date.getMinutes() );
ogur
źródło
2
Co to <10?'0':''oznacza?
user1063287
@ user1063287 jest to wbudowane oświadczenie if else
Aryeh Armon
5
@ user1063287 To znaczy: "Jeśli getMinutes () jest mniejsze niż 10, zwróć 0, jeśli większe, zwróć pusty ciąg.
Michael Giovanni Pumo
(warunek? prawda: fałsz) w PHP można pominąć prawdziwe stwierdzenie (warunek?: fałsz) w JS, a następnie użyłbyś (warunek || fałsz) operatora potrójnego en.wikipedia.org/wiki/Ternary_operation
llange
203

Ups, te odpowiedzi nie są świetne, nawet najwyższy post został podniesiony. Proszę bardzo, między przeglądarkami i czystszą konwersję int / string. Ponadto radzę nie używać nazwy zmiennej `` data '' z kodem, na przykład w date = Date(...)przypadku, gdy w dużym stopniu polegasz na rozróżnianiu wielkości liter w języku (działa, ale ryzykowne, gdy pracujesz z kodem serwera / przeglądarki w różnych językach z różnymi regułami) . Zakładając więc datę javascript w zmiennej current_date:

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

Technika polega na zastosowaniu 2 skrajnych prawych znaków (slice(-2))„0” poprzedzonych wartością ciągu getMinutes(). Więc:

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

i

"0"+"1" -> "01".slice(-2) -> "01"
Bambam
źródło
7
Eleganckie rozwiązanie
Oldenborg
1
Użycie plastra (-2) jest sprzeczne z intuicją, ale mi się podoba.
ChrisFox
33

Innym krótkim sposobem jest wypełnienie minut zerem wiodącym za pomocą:

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

Znaczenie: Spraw, aby łańcuch był długi na dwa znaki, jeśli brakuje znaku, ustaw go 0w tej pozycji.

Zobacz dokumentację na str.padStart (targetLength, padString)

Kai Noack
źródło
18

Elegancka funkcja ES6 do formatowania daty w hh:mm:ss:

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

const formatTime = (date) =>
  [date.getHours(), date.getMinutes(), date.getSeconds()]
  .map(leadingZero)
  .join(':');
sf77
źródło
12

Jeśli mogę, chciałbym przedstawić bardziej zgrabne rozwiązanie problemu. Przyjęta odpowiedź jest bardzo dobra. Ale zrobiłbym to w ten sposób.

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

Teraz, jeśli chcesz tego użyć.

console.log(date.getFullMinutes());
KapteinMarshall
źródło
10

Sugeruję:

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

jest to jedno wywołanie funkcji mniej. Zawsze dobrze jest pomyśleć o wydajności. Jest też krótki;

user2846569
źródło
4

powinieneś sprawdzić, czy jest mniejszy niż 10 ... nie szukając jego długości, ponieważ jest to liczba, a nie ciąg

Yaron U.
źródło
4

Inna opcja:

var dateTime = new Date();
var minutesTwoDigitsWithLeadingZero = ("0" + dateTime.getMinutes()).substr(-2);
IanGSY
źródło
Podoba mi się to rozwiązanie, ale wygląda na to, że IE8 i wcześniejsze wersje nie obsługują liczb ujemnych dla substr. w3schools.com/jsref/jsref_substr.asp
GtEx
4

Korzystając z ECMAScript Internationalization API, więcej informacji :

const twoDigitMinutes = date.toLocaleString('en-us', { minute: '2-digit' });
Hamid Mosalla
źródło
3

.lengthjest niezdefiniowana, ponieważ getMinuteszwraca liczbę, a nie ciąg. liczby nie mają lengthwłasności. Mógłbyś

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

aby utworzyć ciąg, a następnie sprawdź długość (chcesz sprawdzić length === 1, a nie 0).

hvgotcodes
źródło
3

Liczby nie mają długości, ale możesz łatwo przekonwertować liczbę na ciąg, sprawdzić długość, a następnie w razie potrzeby wstawić 0 na początku:

var strMonth = '' + date.getMinutes ();
if (strMonth.length == 1) {
  strMonth = '0' + strMonth;
}
Glenn
źródło
3

Nie widzę tutaj żadnych odpowiedzi ES6, więc dodam jedną z formatowaniem StandardJS

// ES6 String formatting example
const time = new Date()
const tempMinutes = new Date.getMinutes()
const minutes = (tempMinutes < 10) ? `0${tempMinutes}` : tempMinutes
Jordan Papaleo
źródło
3

Zakładam, że potrzebujesz wartości jako ciągu. Możesz użyć poniższego kodu. Zawsze zwróci dwie cyfry minut jako ciąg.

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

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

Mam nadzieję że to pomoże.

Andrew L.
źródło
1

Zwykle używam tego fragmentu kodu:

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

Jest dość podobny do zaakceptowanej odpowiedzi @ogur, ale nie łączy pustego ciągu w przypadku, gdy 0 nie jest potrzebne. Nie wiem, czy tak jest lepiej. Po prostu inny sposób, aby to zrobić!

JRMLSTF
źródło
1

możesz użyć moment js:

moment(date).format('mm')

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

mam nadzieję, że to komuś pomoże

mir
źródło
bardzo miło, gdy ktoś i tak korzysta z chwili, dziękuję :-)
Nadine
0
$(".min").append( (date.getMinutes()<10?'0':'') + date.getMinutes() );

nowość w JS, więc było to bardzo pomocne, najbardziej ppl patrząc na ten problem nowy, więc w ten sposób pokazałem go w div o nazwie "class =" min "

mam nadzieję, że to komuś pomoże

Jason Teunissen
źródło
0

co powiesz na to? mi to pasuje! :)

var d = new Date();
var minutes = d.getMinutes().toString().replace(/^(\d)$/, '0$1');
Yuri M
źródło
0

Inna opcja, aby uzyskać dwucyfrowe minuty lub godziny.

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

var minutes = date.toTimeString().slice(3, 5); 
var hours   = date.toTimeString().slice(0, 2); 
Kasper Kamperman
źródło
-2

Jeśli używasz AngularJS w swoim projekcie, po prostu wstrzyknij $ filter i użyj go tak jak tutaj:

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

Możesz również sformatować dane wyjściowe w szablonie, więcej o filtrach tutaj .

eso32
źródło