getMinutes () 0-9 - Как отображать двузначные числа?


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

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

Это возвращает 3.

  1. Как заставить его вернуть '03'?
  2. Почему .lengthвозврат не определен?

Я попробовал это, но это не сработало:

Если strlen == 1тогдаnum = ('0' + num);


Чтобы сложить, возвращаемое значение .getMinutes()является целым числом, вы не можете получить доступ .lengthк целому числу. Для этого (не рекомендуется при работе с датами) выполняется анализ числа до строки, а затем проверка длины. Например:date.getMinutes().toString().length
ViniciusPires

Ответы:


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

console.log( (date.getMinutes()<10?'0':'') + date.getMinutes() );

2
Что это <10?'0':''значит?
user1063287

@ user1063287 это встроенное выражение if else
Aryeh Armon

5
@ user1063287 Это означает: «Если getMinutes () меньше 10, вернуть 0, если больше, вернуть пустую строку.
Майкл Джованни Пумо


(условие? true: false) в PHP вы можете опустить утверждение true (условие?: false) в JS, которое вы затем будете использовать (условие || false) Тернарный оператор en.wikipedia.org/wiki/Ternary_operation
llange

203

Похоже, эти ответы не очень хорошие, даже верхний пост был добавлен. Здесь вы, кросс-браузер и чистое преобразование int / string. Кроме того, мой совет: не используйте имя переменной date с кодом, например, date = Date(...)когда вы в большой степени полагаетесь на чувствительность к регистру языков (это работает, но рискованно, когда вы работаете с кодом сервера / браузера на разных языках с разными правилами) , Итак, предположим, что JavaScript в Date current_date:

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

Техника состоит в том, чтобы взять 2 правых символа (slice(-2))«0», добавленных к строковому значению getMinutes(). Так:

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

и

"0"+"1" -> "01".slice(-2) -> "01"

7
Элегантное решение
Ольденборг

1
Использование среза (-2) нелогично, но мне это нравится.
ChrisFox

33

Другой короткий способ - заполнить минуты начальным нулем, используя:

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

Значение: сделать строку длиной в два символа, если символ отсутствует, установить 0в эту позицию.

Смотрите документы на str.padStart (targetLength, padString)


19

Элегантная функция ES6 для форматирования даты в hh:mm:ss:

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

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

12

Если можно, я хотел бы предложить более изящное решение проблемы. Принятый ответ очень хорош. Но я бы сделал это так.

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

Теперь, если вы хотите использовать это.

console.log(date.getFullMinutes());

10

Я предлагаю:

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

это на один вызов функции меньше. Всегда хорошо думать о производительности. Это тоже коротко;


4

вы должны проверить, меньше ли оно 10 ... не ища его длину, потому что это число, а не строка


4

Другой вариант:

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

Мне нравится это решение, но похоже, что IE8 и более ранние версии не поддерживают отрицательные числа для substr. w3schools.com/jsref/jsref_substr.asp
GtEx 01


3

.lengthне определено, поскольку getMinutesвозвращает число, а не строку. номера не имеют lengthсвойства. Ты мог бы сделать

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

чтобы сделать его строкой, затем проверьте длину (вы хотите проверить length === 1, а не 0).


3

Числа не имеют длины, но вы можете легко преобразовать число в строку, проверить длину и затем добавить 0, если это необходимо:

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

3

Я не вижу здесь ответов ES6, поэтому я добавлю один, используя форматирование StandardJS

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

3

Я предполагаю, что вам понадобится значение в виде строки. Вы можете использовать приведенный ниже код. Он всегда будет возвращать, давая вам две цифры минут в виде строки.

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

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

Надеюсь это поможет.


1

Обычно я использую этот фрагмент кода:

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

Он очень похож на принятый ответ @ogur, но не объединяет пустую строку в случае, если 0 не нужен. Не уверен, что это лучше. Просто другой способ сделать это!


1

Вы можете использовать момент JS:

moment(date).format('mm')

пример : moment('2019-10-29T21:08').format('mm') ==> 08

надеюсь, это поможет кому-то


очень приятно, когда кто-то использует момент, спасибо :-)
Nadine

0
$(".min").append( (date.getMinutes()<10?'0':'') + date.getMinutes() );

новичок в JS, так что это было очень полезно для большинства людей, которые смотрят на этот пробник, тоже новый, так вот как я получил его, чтобы показать в div под названием "class =" min "

надеюсь, это поможет кому-то


0

как насчет этого? меня устраивает! :)

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

0

Другой вариант, чтобы получить две цифры минут или часов.

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

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


-2

Если вы используете AngularJS в своем проекте, просто введите $ filter и используйте его как здесь:

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

Вы также можете отформатировать вывод в шаблоне, подробнее о фильтрах здесь .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.