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


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

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"

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)


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

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

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;


4

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


4

Otra opción:

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

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


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


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

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

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.


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!


1

puedes usar moment js:

moment(date).format('mm')

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

espero que ayude a alguien


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


0

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

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

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


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.