web-dev-qa-db-fra.com

Ajout de "0" si l'horloge a un chiffre

j'ai un script d'horloge. Tout va bien et ça marche parfaitement mais ... j'ai un problème. Si à l'horloge est réglé un chiffre d'une heure ou d'une minute comme 1: 5 horloge n'ajoutant pas de chiffre "0" avant. C'est ce que j'ai fait mais ça ne marche pas. Pouvez-vous m'aider, beaucoup?

window.setInterval(function update_clock() {
    var currentTime = new Date();
    var currentHours = currentTime.getHours();
    var currentMinutes = currentTime.getMinutes();
    $.ajax({
        success: function (clock) {
            document.getElementById("hour").firstChild.nodeValue = currentHours;
            document.getElementById("minutes").firstChild.nodeValue = currentMinutes;
            if (currentMinutes.length == 1) {
                currentMinutes = "0" + currentMinutes;
            }
        }
    });
}, 999);
21
Lukas

currentMinutes est un nombre, il n'a donc pas la propriété length. De plus, vous devez vérifier length avant de définir currentMinutes sur l'élément minutes.

Quelque chose comme:

var currentHours = currentTime.getHours();
var currentMinutes = currentTime.getMinutes();

$.ajax({
    success: function (clock) {
        if (currentMinutes.toString().length == 1) {
            currentMinutes = "0" + currentMinutes;
        }

        document.getElementById("hour").firstChild.nodeValue = currentHours;
        document.getElementById("minutes").firstChild.nodeValue = currentMinutes;
    }
});
22
Marcelo De Zen

Vous pouvez utiliser .slice Pour extraire une partie d'une chaîne. Donnez-lui un nombre négatif afin de couper à partir de la fin de la chaîne.

Par conséquent, ce qui suit est possible et assez simple:

('0'+currentMinutes).slice(-2)

La concaténation avec '0' Garantit que la cible de l'opération sera toujours une chaîne. ('0'+currentMinutes) Produira une chaîne de 2 ou 3 lettres ("07" ou "017", par exemple). Si vous coupez les deux derniers caractères de cette chaîne, vous obtiendrez un nombre à deux chiffres rempli de 0.

Notez que ce qui précède produirait "00" si currentMinutes est 100, Donc cela suppose que vous connaissez les valeurs avec lesquelles vous allez travailler.

Cela pourrait être extrait vers quelque chose de plus réutilisable:

Number.prototype.zeroPad = function() {
   return ('0'+this).slice(-2);
};

Cela vous permettrait d'écrire:

currentMinutes.zeroPad();

Vous pouvez également définir la longueur de la variable de remplissage:

Number.prototype.zeroPad = function(length) {
   length = length || 2; // defaults to 2 if no parameter is passed
   return (new Array(length).join('0')+this).slice(length*-1);
};

Qui pourrait être appelé comme:

currentMinutes.zeroPad(); // e.g. "07" or "17"
currentMinutes.zeroPad(3); // e.g. "007" or "017"

Notez que tandis que currentMinutes.zeroPad() fonctionnera, 7.zeroPad() ne fonctionnera pas.

30
David Hedlund

currentMinutes n'aura pas de propriété length, car c'est un Number, pas un String.

Vous pouvez le forcer à être un String.

if ((currentMinutes+'').length == 1) {
     currentMinutes = "0" + currentMinutes;
}

Mais, parce que vous avez un Number, vous devez faire votre condition ...

if (currentMinutes < 10) {
     currentMinutes = "0" + currentMinutes;
}

Si vous étiez particulièrement fou, vous pourriez le faire ...

var hoursMinutes = ((new Date)+"").match(/\d+:\d+(?=:)/)[0].split(":");
9
alex

Essayez d'utiliser la méthode padStart(). Basée sur les documents MDN, la méthode padStart() continue de remplir la chaîne avec une autre chaîne jusqu'à ce qu'elle atteigne la longueur souhaitée. Lien vers les documents MDN sur padStart ().

Si vous souhaitez formater votre chaîne pour qu'elle comporte 4 chiffres avec des zéros non significatifs si moins de 4 chiffres sont disponibles. La méthode padStart() peut venir à la rescousse comme suit:

let str = "34"

str = str.padStart(4, "0") // results in "0034"
console.log(str)

Un exemple de cas de date:

var now = new Date(); 
var year= now.getFullYear(); 
var month= (now.getMonth()+1).toString().padStart(2, "0");
var day= now.getDate().toString().padStart(2, "0");
var hour = now.getHours().toString().padStart(2, "0");
var minute = now.getMinutes().toString().padStart(2, "0");

document.getElementById("date").innerHTML =`${day}-${month}-${year}-${hour}:${minute}`;
 
<div id="date"></div>
2
Pouya

Sur la base des autres astres, j'ai créé ces lignes de code:

var now = new Date(); 
var dd = now.getDate(); 
var mm = now.getMonth()+1;
var y = now.getFullYear(); 
var h = now.getHours();
var m = now.getMinutes();

function aZero(n) {
  return n.toString().length == 1 ?  n = '0' + n: n;
}

document.getElementById("out").innerHTML =
  aZero(dd) + "-" +
            aZero(mm) + "-" +
            y +  "   -  "   +
            aZero(h)  + ":" +
            aZero(m);
<div id="out">my time :D</div>

Cu la prochaine fois.

1
Johan Hoeksma

Vous pouvez également vérifier sprintf () pour le javascript.

Vous pourriez aller avec quelque chose d'aussi simple que:

sprintf("%02d:%02d", currentHours, currentMinutes);

L'utilisation de fonctions qui acceptent la mise en forme vous permet d'avoir beaucoup plus de contrôle sur votre sortie lorsque vous en avez besoin.

1
dureuill

Essayez d'utiliser ('0' + currentTime.getHours()).slice(-2)

Mise à jour de votre question -

window.setInterval(function update_clock() {
    var currentTime = new Date();
    var currentHours = ('0' + currentTime.getHours()).slice(-2);
    var currentMinutes = ('0' + currentTime.getMinutes()).slice(-2);
    $.ajax({
        success: function (clock) {
            document.getElementById("hour").firstChild.nodeValue = currentHours;
            document.getElementById("minutes").firstChild.nodeValue = currentMinutes;
            if (currentMinutes.length == 1) {
                currentMinutes = "0" + currentMinutes;
            }
        }
    });
}, 999);
1
Developer_29

dans Android (intégré)

String time=String.format("%02d:%02d",hourOfDay,minute);

en utilisation javascript (sprintf.js)

int i = 1;
string s = sprintf("%02d", i);
document.write(s); // Prints "01"

sprintf.js: http://www.diveintojavascript.com/projects/javascript-sprintf

0
sms247