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':''означає?
користувач1063287

@ user1063287 це вкладене, якщо інше твердження
Aryeh Armon

5
@ user1063287 Це означає: "Якщо getMinutes () менше 10, поверніть 0, якщо більше, поверніть порожню рядок.
Michael Giovanni Pumo


(умова? true: false) у PHP ви можете опустити справжнє твердження (умова?: false) у JS, яке б ви використовували (умова || false) Ternary operator en.wikipedia.org/wiki/Ternary_operation
llange

203

Ці відповіді не дуже, навіть верхній пост підкреслений. Тут ви, перехресний браузер і чистіший перетворення int / string. Плюс моя порада - не використовувати назву змінної 'date' з кодом, наприклад, date = Date(...)коли ви сильно покладаєтесь на чутливість мови (це працює, але ризиковано, коли ви працюєте з кодом сервера / браузера на різних мовах з різними правилами) . Отже, припускаючи дату JavaScript у варі current_date:

mins = ('0'+current_date.getMinutes()).slice(-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


3

.lengthне визначено, тому що getMinutesповертає число, а не рядок. номери не мають lengthвластивості. Ви могли б зробити

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

щоб зробити його рядком, потім перевірте довжину (ви хочете перевірити length === 1, а не 0).


3

Числа не мають довжини, але ви можете легко перетворити число в рядок, перевірити довжину, а потім додати 0, якщо це необхідно:

var strMonth = '' + date.getMinutes ();
якщо (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

сподіваюся, що це комусь допоможе


Дуже приємно, коли хтось усе-таки використовує момент, дякую :-)
Надін

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

новачок у JS, тому це було дуже корисно для більшої частини ppl, дивлячись на цю проблему нового, тож ось як я отримав це для показу у діві під назвою "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.