31

私はいくつかの時計スクリプトを持っています。すべてが順調で、完璧に機能していますが... 1 つ問題があります。1:5 時計のように時計に 1 桁の時または分が設定されている場合は、前に「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);
4

9 に答える 9

49

.slice文字列の一部を抽出するために使用できます。文字列の末尾からスライスするには、負の数を渡します。

したがって、次のことが可能であり、非常に簡単です。

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

と連結する'0'と、操作のターゲットが常に文字列になることが保証されます。('0'+currentMinutes)2 文字または 3 文字の文字列が生成されます (たとえば、"07" または "017")。その文字列から最後の 2 文字をスライスすると、0 が埋め込まれた 2 桁の数字が得られます。

上記はcurrentMinutesis100の場合に "00" を生成することに注意してください。そのため、使用する値がわかっていることを前提としています。

これは、より再利用可能なものに抽出できます。

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

于 2012-09-05T09:39:04.187 に答える
26

currentMinutesは数値なので、lengthプロパティはありません。また、要素に をlength設定する前にを確認する必要があります。currentMinutesminutes

何かのようなもの:

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;
    }
});
于 2012-09-05T09:28:29.050 に答える
9

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(":");
于 2012-09-05T09:26:46.117 に答える
1

JavaScript のsprintf()を確認することもできます。

次のような単純なものを使用できます。

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

書式設定を受け入れる関数を使用すると、必要に応じて出力をより詳細に制御できます。

于 2012-09-05T09:28:33.587 に答える