getMinutes () 0-9 - Bagaimana cara menampilkan dua angka digit?

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

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

Ini mengembalikan 3.

  1. Bagaimana cara mengembalikannya '03'?
  2. Mengapa .lengthpengembalian tidak dibatasi?

Saya mencoba ini, tetapi tidak berhasil:

Jika strlen == 1demikiannum = ('0' + num);

Mark Fondy
sumber
Hanya untuk menjumlahkan, kembalinya .getMinutes()adalah integer, Anda tidak dapat mengakses .lengthdari integer. Untuk mencapai itu (tidak disarankan saat berurusan dengan tanggal) adalah menguraikan nomor ke string dan kemudian memeriksa panjangnya. Misalnya:date.getMinutes().toString().length
ViniciusPires

Jawaban:

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

console.log( (date.getMinutes()<10?'0':'') + date.getMinutes() );
ogur
sumber
2
Apa artinya ini <10?'0':''?
user1063287
@ user1063287 itu adalah pernyataan inline if else
Aryeh Armon
5
@ user1063287 Berarti: "Jika getMinutes () kurang dari 10, kembalikan 0, jika lebih besar, kembalikan string kosong.
Michael Giovanni Pumo
(condition? true: false) di PHP Anda dapat menghilangkan pernyataan true (kondisi
?:
203

Astaga jawaban ini tidak bagus, bahkan pos teratas pun terpilih. Ini dia, lintas-browser dan konversi int / string yang lebih bersih. Plus saran saya adalah jangan menggunakan nama variabel 'date' dengan kode seperti di date = Date(...)mana Anda sangat bergantung pada sensitivitas huruf bahasa (itu berfungsi, tetapi berisiko ketika Anda bekerja dengan kode server / browser dalam bahasa yang berbeda dengan aturan yang berbeda) . Jadi dengan asumsi Tanggal javascript dalam suatu var current_date:

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

Teknik ini mengambil 2 karakter paling kanan (slice(-2))dari "0" yang ditambahkan ke nilai string getMinutes(). Begitu:

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

dan

"0"+"1" -> "01".slice(-2) -> "01"
Bambam
sumber
7
Solusi elegan
Oldenborg
1
Penggunaan slice (-2) adalah kontra-intuitif, tapi saya suka itu.
ChrisFox
33

Cara singkat lainnya adalah mengisi menit dengan nol di depan menggunakan:

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

Artinya: Buat string dua char panjang, jika char hilang maka atur 0pada posisi ini.

Lihat dokumen di str.padStart (targetLength, padString)

Kai Noack
sumber
18

Fungsi ES6 yang elegan untuk memformat tanggal menjadi hh:mm:ss:

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

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

Saya ingin memberikan solusi yang lebih rapi untuk masalah ini jika saya bisa. Jawaban yang diterima sangat bagus. Tetapi saya akan melakukannya seperti ini.

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

Sekarang jika Anda ingin menggunakan ini.

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

Saya menyarankan:

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

itu adalah satu panggilan fungsi yang lebih sedikit. Itu selalu baik untuk berpikir tentang kinerja. Itu pendek juga;

pengguna2846569
sumber
4

Anda harus memeriksa apakah kurang dari 10 ... tidak mencari panjangnya, karena ini adalah angka dan bukan string

Yaron U.
sumber
4

Pilihan lain:

var dateTime = new Date();
var minutesTwoDigitsWithLeadingZero = ("0" + dateTime.getMinutes()).substr(-2);
IanGSY
sumber
Saya suka solusi ini, tetapi sepertinya IE8 dan versi sebelumnya tidak mendukung angka negatif substr. w3schools.com/jsref/jsref_substr.asp
GtEx
4

Menggunakan ECMAScript Internationalisasi API, info lebih lanjut :

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

.lengthtidak terdefinisi karena getMinutesmengembalikan nomor, bukan string. angka tidak memiliki lengthproperti. Anda bisa melakukannya

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

untuk membuatnya menjadi string, lalu periksa panjangnya (Anda ingin memeriksa length === 1, bukan 0).

hvgotcodes
sumber
3

Angka tidak memiliki panjang, tetapi Anda dapat dengan mudah mengkonversi angka menjadi string, memeriksa panjangnya dan kemudian menambahkan 0 jika perlu:

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

Saya tidak melihat jawaban ES6 di sini jadi saya akan menambahkannya menggunakan format StandardJS

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

Saya menganggap Anda akan membutuhkan nilai sebagai string. Anda bisa menggunakan kode di bawah ini. Itu akan selalu kembali memberi Anda dua digit menit sebagai string.

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

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

Semoga ini membantu.

Andrew L.
sumber
1

Saya biasanya menggunakan kode ini:

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

Ini sangat mirip dengan jawaban yang diterima @ogur tetapi tidak merangkai string kosong dalam hal 0 tidak diperlukan. Tidak yakin itu lebih baik. Hanya cara lain untuk melakukannya!

JRMLSTF
sumber
1

Anda dapat menggunakan js saat:

moment(date).format('mm')

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

semoga membantu seseorang

mir
sumber
sangat baik ketika seseorang menggunakan momen, terima kasih :-)
Nadine
0
$(".min").append( (date.getMinutes()<10?'0':'') + date.getMinutes() );

baru ke JS jadi ini sangat membantu ppl melihat prob ini baru juga jadi ini adalah bagaimana saya mendapatkannya untuk ditampilkan di div yang disebut "class =" min "

semoga membantu seseorang

Jason Teunissen
sumber
0

bagaimana dengan ini? ini bekerja untuk saya! :)

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

Pilihan lain untuk mendapatkan dua digit menit atau jam.

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

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

Jika Anda menggunakan AngularJS dalam proyek Anda, cukup masukkan $ filter dan gunakan seperti di sini:

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

Anda juga dapat memformat output dalam template, lebih lanjut tentang filter di sini .

eso32
sumber