getMinutes () 0-9 - ¿Cómo mostrar números de dos dígitos?

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

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

Esto devuelve 3.

  1. ¿Cómo hago que devuelva '03'?
  2. ¿Por qué .lengthregresa indefinido?

Intenté esto, pero no funcionó:

Si strlen == 1entoncesnum = ('0' + num);

Mark Fondy
fuente
Solo para sumar, el retorno de .getMinutes()es un número entero, no se puede acceder .lengthdesde un número entero. Para lograr eso (no recomendado cuando se trata con fechas) es analizar el número en una cadena y luego verificar la longitud. Por ejemplo:date.getMinutes().toString().length
ViniciusPires

Respuestas:

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

console.log( (date.getMinutes()<10?'0':'') + date.getMinutes() );
ogur
fuente
2
¿Qué significa esto <10?'0':''?
user1063287
@ user1063287 es una declaración inline if else
Aryeh Armon
55
@ user1063287 Significa: "Si getMinutes () es menor que 10, devuelve un 0, si es mayor, devuelve una cadena vacía.
Michael Giovanni Pumo
(condición? verdadero: falso) en PHP puede omitir la declaración verdadera (condición?: falso) en JS luego usaría (condición || falso) Operador ternario en.wikipedia.org/wiki/Ternary_operation
llange
203

Vaya, estas respuestas no son geniales, incluso la publicación superior subió. Aquí está la conversión int / string entre navegadores y limpiadores. Además, mi consejo es que no use una 'fecha' de nombre de variable con código como date = Date(...)donde depende en gran medida de mayúsculas y minúsculas en el idioma (funciona, pero es arriesgado cuando trabaja con el código del servidor / navegador en diferentes idiomas con diferentes reglas) . Asumiendo la fecha de JavaScript en una var current_date:

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

La técnica consiste en tomar los 2 caracteres más a la derecha (slice(-2))de "0" antepuestos al valor de cadena de getMinutes(). Entonces:

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

y

"0"+"1" -> "01".slice(-2) -> "01"
Bam Bam
fuente
77
Solución elegante
Oldenborg
1
El uso de slice (-2) es contra-intuitivo, pero me gusta.
ChrisFox
33

Otra forma corta es llenar los minutos con un cero inicial usando:

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

Significado: Haga que la cadena tenga dos caracteres de largo, si falta un carácter, configúrelo 0en esta posición.

Ver documentos en str.padStart (targetLength, padString)

Kai Noack
fuente
18

Elegante función ES6 para formatear una fecha en hh:mm:ss:

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

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

Me gustaría proporcionar una solución más ordenada al problema si puedo. La respuesta aceptada es muy buena. Pero lo habría hecho así.

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

Ahora si quieres usar esto.

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

Yo sugiero:

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

Es una función llamada menos. Siempre es bueno pensar en el rendimiento. Es corto también;

usuario2846569
fuente
4

debe verificar si es menor que 10 ... no busca la longitud del mismo, porque este es un número y no una cadena

Yaron U.
fuente
4

Otra opción:

var dateTime = new Date();
var minutesTwoDigitsWithLeadingZero = ("0" + dateTime.getMinutes()).substr(-2);
IanGSY
fuente
Me gusta esta solución, pero parece que IE8 y versiones anteriores no admiten números negativos substr. w3schools.com/jsref/jsref_substr.asp
GtEx
4

Usando la API de internacionalización ECMAScript, más información :

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

.lengthno está definido porque getMinutesdevuelve un número, no una cadena. Los números no tienen una lengthpropiedad. Podrías hacerlo

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

para convertirlo en una cadena, luego verifique la longitud (querría verificar length === 1, no 0).

hvgotcodes
fuente
3

Los números no tienen una longitud, pero puede convertir fácilmente el número en una cadena, verificar la longitud y luego anteponer el 0 si es necesario:

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

No veo ninguna respuesta de ES6 aquí, así que agregaré una usando el formato StandardJS

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

Supongo que necesitarías el valor como cadena. Puedes usar el siguiente código. Siempre regresará y le dará los minutos de dos dígitos como cadena.

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

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

Espero que esto ayude.

Andrew L.
fuente
1

Usualmente uso este código:

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

Es bastante similar a la respuesta aceptada de @ogur, pero no concatena una cadena vacía en el caso de que 0 no sea necesario. No estoy seguro de que sea mejor. ¡Solo otra forma de hacerlo!

JRMLSTF
fuente
1

puedes usar moment js:

moment(date).format('mm')

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

espero que ayude a alguien

mir
fuente
muy agradable cuando uno de todos modos está usando el momento, gracias :-)
Nadine
0
$(".min").append( (date.getMinutes()<10?'0':'') + date.getMinutes() );

nuevo en JS, así que esto fue muy útil para la mayoría de las personas que vieron este problema también, así que así es como lo hice para mostrar en el div llamado "class =" min "

espero que ayude a alguien

Jason Teunissen
fuente
0

¿Qué tal esto? ¡esto funciona para mi! :)

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

Otra opción para obtener minutos u horas de dos 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
fuente
-2

Si está utilizando AngularJS en su proyecto, simplemente inyecte $ filter y úselo como aquí:

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

También puede formatear la salida en la plantilla, más sobre los filtros aquí .

eso32
fuente