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


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

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"

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)


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(':');

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

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;


4

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


4

Inna opcja:

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

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


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


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

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

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.


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ć!


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


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


0

co powiesz na to? mi to pasuje! :)

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

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


-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 .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.