getMinutes () 0-9 - Como exibir números de dois dígitos?

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

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

Isso retorna 3.

  1. Como faço para retornar '03'?
  2. Por que .lengthretornar não encontrado?

Eu tentei isso, mas não funcionou:

Se strlen == 1entãonum = ('0' + num);

Mark Fondy
fonte
Só para adicionar, o retorno de .getMinutes()é um número inteiro, você não pode acessar a .lengthpartir de um número inteiro. Para fazer isso (não recomendado ao lidar com datas) é analisar o número em uma sequência e, em seguida, verificar o comprimento. Por exemplo:date.getMinutes().toString().length
ViniciusPires

Respostas:

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

console.log( (date.getMinutes()<10?'0':'') + date.getMinutes() );
ogur
fonte
2
O que isso <10?'0':''significa?
user1063287
@ user1063287 é um inline se else
Aryeh Armon
5
@ user1063287 Significa: "Se getMinutes () for menor que 10, retorne um 0, se for maior, retorne uma string vazia.
Michael Giovanni Pumo 17/16
(condition? true: false) no PHP, você pode omitir a declaração true (condition?: false) no JS que você usaria (condition || false) Operador ternário pt.wikipedia.org/wiki/Ternary_operation
llange
203

Caramba, essas respostas não são ótimas, mesmo o post principal melhorado. Aqui você vai, cross-browser e conversão int / string mais limpa. Além disso, meu conselho é não usar um nome de variável 'date' com código como o date = Date(...)local em que você depende muito da distinção entre maiúsculas e minúsculas (funciona, mas é arriscado ao trabalhar com o código do servidor / navegador em diferentes idiomas e com regras diferentes) . Então, assumindo a data do javascript em uma var current_date:

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

A técnica é usar os 2 caracteres mais à direita (slice(-2))de "0" anexados ao valor da sequência de getMinutes(). Assim:

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

e

"0"+"1" -> "01".slice(-2) -> "01"
Bambam
fonte
7
Solução elegante
Oldenborg
1
O uso da fatia (-2) é contra-intuitivo, mas eu gosto.
22417 ChrisFox
33

Outra maneira curta é preencher os minutos com um zero à esquerda usando:

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

Significado: faça com que a string tenha dois caracteres, se estiver faltando um caractere, defina 0 a nessa posição.

Consulte os documentos em str.padStart (targetLength, padString)

Kai Noack
fonte
18

Função ES6 elegante para formatar uma data em hh:mm:ss:

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

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

Gostaria de fornecer uma solução mais clara para o problema, se puder. A resposta aceita é muito boa. Mas eu teria feito assim.

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

Agora, se você quiser usar isso.

console.log(date.getFullMinutes());
KapteinMarshall
fonte
10

Eu sugiro:

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

é uma chamada de função a menos. É sempre bom pensar em desempenho. Também é curto;

user2846569
fonte
4

você deve verificar se é menor que 10 ... sem procurar o comprimento, porque esse é um número e não uma sequência

Yaron U.
fonte
4

Outra opção:

var dateTime = new Date();
var minutesTwoDigitsWithLeadingZero = ("0" + dateTime.getMinutes()).substr(-2);
IanGSY
fonte
Eu gosto dessa solução, mas parece que o IE8 e versões anteriores não suportam números negativos para substr. w3schools.com/jsref/jsref_substr.asp
GtEx
4

Usando a API de internacionalização do ECMAScript, mais informações :

const twoDigitMinutes = date.toLocaleString('en-us', { minute: '2-digit' });
Hamid Mosalla
fonte
3

.lengthé indefinido porque getMinutesestá retornando um número, não uma sequência. números não têm uma lengthpropriedade. Você poderia fazer

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

para torná-lo uma corda, em seguida, verificar o comprimento (que você gostaria de verificar se há length === 1, não 0).

hvgotcodes
fonte
3

Os números não têm comprimento, mas você pode facilmente converter o número em uma string, verificar o comprimento e, em seguida, acrescentar o 0, se necessário:

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

Não vejo respostas ES6 aqui, então adicionarei uma usando a formatação StandardJS

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

Presumo que você precisaria do valor como string. Você pode usar o código abaixo. Ele sempre retornará, fornecendo os minutos de dois dígitos como sequência.

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

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

Espero que isto ajude.

Andrew L.
fonte
1

Eu costumo usar este pedaço de código:

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

É bastante semelhante à resposta aceita @ogur, mas não concatena uma sequência vazia, caso 0 não seja necessário. Não tenho certeza se é melhor. Apenas uma outra maneira de fazê-lo!

JRMLSTF
fonte
1

você pode usar o momento js:

moment(date).format('mm')

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

espero que ajude alguém

mir
fonte
muito bom quando um de qualquer maneira é utilizando momento, obrigado :-)
Nadine
0
$(".min").append( (date.getMinutes()<10?'0':'') + date.getMinutes() );

novo no JS, então isso foi muito útil para as pessoas que procuram este problema também, então é assim que eu o mostro na div chamada "class =" min "

espero que ajude alguém

Jason Teunissen
fonte
0

que tal agora? funciona para mim! :)

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

Outra opção para obter minutos ou horas com dois dígitos.

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

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

Se você estiver usando o AngularJS em seu projeto, basta injetar $ filter e usá-lo como aqui:

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

Você também pode formatar a saída no modelo, mais sobre filtros aqui .

eso32
fonte