Что не так со скриптом?

[Не дубликат, т.к. я в скрипте уже вставил то что мне нужно, но оно не работает] Написал скрипт для VK API с функционалом SovaScript, но когда запускаю выдает не 02:07, а 2:7. Что надо исправить?

onStart = function(a) {

repeat(function(){

    var date = new Date(); currentHours = date.getHours(); currentHours = ("0" + currentHours).slice(-2)
    var time = ['?','?','?','?','?','?','?','?','?','?','?','?'][((new Date()).getHours()%12)] + date.getHours() + ":" + date.getMinutes()
    
    Vk.call("status.set", {text: time}, function(response){log(response)});
}, 0, 60000);
};

P.S. тут везде есть отступ, сайт их не видит.


Ответы (1 шт):

Автор решения: Михаил Ребров

У Вас же в коде есть пример, как добавить ведущий ноль
(но при формировании сообщения вы его игнорируете)

("0" + date.getHours()).slice(-2)
  1. Вы добавляете спереди "0"
  2. Обрезаете с правого краю 2 символа

Соответственно, если на входе будет 9, то они преобразуются следующим образом:

"9" -> "0" + "9" = "09" -> "09".slice(-2) = "09"

Если же на вход придёт 35, то преобразования будут выглядеть так:

"35" -> `"0" + "35" =  "035" -> "035".slice(-2)= "35"

Соответственно, у Вас всегда строка будет состоять из двух символов и если число меньше 10 — оно будет начинаться с нуля.

Вы же получаете значения минут и часов в целочисленном формате

date.getHours() + ":" + date.getMinutes()

В итоге:

onStart = function(a) {
    repeat(function(){
        var date = new Date(),
            currentHours = ("0" + date.getHours()).slice(-2),
            currentMinutes = ("0" + date.getMinutes()).slice(-2),
            index = (date.getHours() % 12);
            clocks = ['?','?','?','?','?','?','?','?','?','?','?','?'],
            time = clocks[index] + " " + currentHours + ":" + currentMinutes;
    
        Vk.call("status.set", {text: time}, function(response){log(response)});
    }, 0, 60000);
};

На выходе выдает:

? 06:25

Что как я полагаю и ожидалось вами

→ Ссылка