getMinutes () 0-9 - İki basamaklı sayılar nasıl görüntülenir?


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

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

Bu 3 değerini döndürür.

  1. Nasıl '03' dönmesini sağlayabilirim?
  2. .lengthİade neden çözülmedi?

Bunu denedim, ama işe yaramadı:

Eğer strlen == 1öyleysenum = ('0' + num);


Sadece toplamak için, .getMinutes()bir tamsayı dönüşüdür, bir tamsayıdan erişemezsiniz .length. Bunu gerçekleştirmek için (tarihlerle uğraşırken tavsiye edilmez) sayıyı bir dizeye ayrıştırır ve ardından uzunluğu kontrol eder. Örn:date.getMinutes().toString().length
ViniciusPires

Yanıtlar:


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

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

2
Bu ne anlama <10?'0':''geliyor?
user1063287

@ user1063287 Başka bir satırda satır içi ise
Aryeh Armon

5
@ user1063287 Bu şu anlama gelir: "getMinutes () 10'dan küçükse, 0
döndür


(condition? true: false) PHP'de, daha sonra kullanacağınız
JS'deki

203

Yikes bu cevaplar harika değil, üstteki yazı bile gergin. Burada, çapraz tarayıcı ve daha temiz int / string dönüşüm. Ayrıca benim tavsiyem, date = Date(...)dil büyük / küçük harf duyarlılığına çok fazla güvendiğiniz gibi bir değişkenli 'tarih' kodu kullanmamanızdır (çalışır, ancak farklı kurallarda farklı dillerde sunucu / tarayıcı koduyla çalışırken risklidir) . Yani javascript Date var bir varsayılarak current_date:

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

Teknik, (slice(-2))dize değerine eklenmiş en sağdaki "0" karakterini alır getMinutes(). Yani:

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

ve

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

7
Zarif çözüm
Oldenborg

1
Dilim (-2) kullanımı karşı sezgiseldir, ancak hoşuma gidiyor.
ChrisFox

33

Başka bir kısa yol, dakikaları aşağıdakileri kullanarak baştaki sıfır ile doldurmaktır:

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

Anlamı: Dizeyi iki karakter uzunluğunda yapın, eğer bir karakter eksikse 0bu konuma ayarlayın .

Str.padStart adresindeki dokümanlara bakın (targetLength, padString)


19

Bir tarihi şu şekilde formatlamak için zarif ES6 işlevi hh:mm:ss:

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

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

12

Mümkünse soruna daha düzgün bir çözüm sunmak istiyorum.Kabul edilen cevap çok iyi. Ama bunu böyle yapardım.

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

Şimdi bunu kullanmak istiyorsanız.

console.log(date.getFullMinutes());

10

Öneririm:

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

daha az bir işlev çağrısıdır. Performansı düşünmek her zaman iyidir. Aynı zamanda kısa;


4

10'dan az olup olmadığını kontrol etmelisiniz ... uzunluğunu aramıyorum, çünkü bu bir sayı ve bir dize değil


4

Başka seçenek:

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

Bu çözümü seviyorum, ancak IE8 ve önceki sürümleri için negatif sayıları desteklemiyor gibi görünüyor substr. w3schools.com/jsref/jsref_substr.asp
GtEx


3

.lengthtanımsız, çünkü getMinutesbir dize değil bir sayı döndürüyor. sayıların bir lengthözelliği yoktur. Yapabilirsin

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

, bunu bir dize yapmak sonra uzunluğunu kontrol (eğer kontrol etmek isteyeyim length === 10 değil).


3

Sayıların uzunluğu yoktur, ancak sayıyı kolayca bir dizeye dönüştürebilir, uzunluğu kontrol edebilir ve gerekirse 0'ın başına ekleyebilirsiniz:

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

3

Burada herhangi bir ES6 yanıtı görmüyorum, bu yüzden StandardJS biçimlendirmesini kullanarak bir tane ekleyeceğim

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

3

Dize olarak değere ihtiyacınız olacağını varsayalım. Aşağıdaki kodu kullanabilirsiniz. Her zaman iki basamaklı dakikayı dize olarak verir.

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

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

Bu yardımcı olur umarım.


1

Genellikle bu kod parçasını kullanırım:

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

@Ogur kabul edilen cevaba oldukça benzerdir, ancak 0'a ihtiyaç duyulmaması durumunda boş bir dizeyi birleştirmez. Daha iyi olduğundan emin değilim. Bunu yapmanın başka bir yolu!


1

js momentini kullanabilirsiniz:

moment(date).format('mm')

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

umarım birine yardım eder


ne olursa olsun anı kullanırken çok güzel, teşekkür ederim :-)
Nadine

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

JS yeni bu yüzden bu çok yeni bu prob bakarak en çok yardımcı oldu bu yüzden bu nasıl "class =" min "adlı div göstermek için var

umarım birine yardım eder


0

buna ne dersin? benim için çalışıyor! :)

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

0

İki basamak dakika veya saat almak için başka bir seçenek.

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

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


-2

Projenizde AngularJS kullanıyorsanız, $ filter enjekte edin ve aşağıdaki gibi kullanın:

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

Ayrıca, şablondaki çıktıyı, daha çok buradaki filtrelerde biçimlendirebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.