Добавление "0", если часы имеют одну цифру

У меня есть часы script. Все в порядке, и он отлично работает, но... у меня одна проблема. Если на часах установлена ​​одна цифра час или минута, как 1: 5 часов, не добавляя цифру "0" раньше. Это то, что я сделал, но он не работает. Можете ли вы помочь мне, много спасибо?

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);

Ответ 1

currentMinutes - это число, поэтому оно не имеет свойства length. Кроме того, вы должны проверить length перед тем, как установить currentMinutes в элемент minutes.

Что-то вроде:

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;
    }
});

Ответ 2

Вы можете использовать .slice для извлечения части строки. Передайте ему отрицательное число, чтобы отрезать его от конца строки.

Следовательно, возможно и достаточно просто:

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

Конкатенация с помощью '0' гарантирует, что цель операции всегда будет строкой. ('0'+currentMinutes) будет выдавать 2 или 3 буквы (например, "07" или "017" ). Нарезание последних двух символов с этой строки даст вам двузначное число с 2-мя цифрами.

Обратите внимание, что приведенное выше будет давать "00", если currentMinutes равно 100, поэтому предполагается, что вы знаете значения, с которыми будете работать.

Это может быть извлечено в нечто более многоразовое:

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

Это позволит вам написать:

currentMinutes.zeroPad();

Вы также можете указать длину переменной заполнения:

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);
};

Которое можно было бы назвать:

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

Обратите внимание, что пока currentMinutes.zeroPad() будет работать, 7.zeroPad() не будет.

Ответ 3

currentMinutes не будет иметь свойство length, так как оно Number, а не String.

Вы можете заставить его быть String.

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

Но, потому что у вас есть Number, вы должны сделать свое условие...

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

Если вы были особенно сумасшедшими, вы могли бы сделать...

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

Ответ 4

Вы также можете проверить sprintf() для javascript.

Вы можете пойти с чем-то простым:

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

Использование функций, принимающих форматирование, позволяет вам намного больше контролировать ваш вывод, когда вам нужно.

Ответ 5

На основе других тентов я создал эти строки кода:

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>

Ответ 6

Попробуйте использовать ('0' + currentTime.getHours()).slice(-2)

Обновил свой вопрос -

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);

Ответ 7

в android (встраивание)

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

в использовании 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

Ответ 8

Попробуйте использовать метод padStart(). Основываясь на документах MDN, метод padStart() продолжает padStart() строку другой строкой, пока не достигнет желаемой длины. Ссылка на MDN документы на padStart().

Если вы хотите отформатировать строку так, чтобы она состояла из 4 цифр с начальными нулями, если доступно менее 4 цифр. Метод padStart() может прийти на помощь следующим образом:

let str = "34"

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