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(':');
sf77
источник
12

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

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

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

console.log(date.getFullMinutes());
KapteinMarshall
источник
10

Я предлагаю:

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

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

user2846569
источник
4

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

Ярон У.
источник
4

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

var dateTime = new Date();
var minutesTwoDigitsWithLeadingZero = ("0" + dateTime.getMinutes()).substr(-2);
IanGSY
источник
Мне нравится это решение, но похоже, что IE8 и более ранние версии не поддерживают отрицательные числа для substr. w3schools.com/jsref/jsref_substr.asp
GtEx 01
3

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

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

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

hvgotcodes
источник
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 не нужен. Не уверен, что это лучше. Просто другой способ сделать это!

JRMLSTF
источник
1

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

moment(date).format('mm')

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

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

Mir
источник
очень приятно, когда кто-то использует момент, спасибо :-)
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); 
Каспер Камперман
источник
-1

Для двухзначных минут используйте: new Date().toLocaleFormat("%M")

z3rone
источник
1
Это
устарело
-2

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

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

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

eso32
источник