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);
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;
}
});
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.
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(":");
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>
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.
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.
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);
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