web-dev-qa-db-ja.com

クロックが1桁の場合は「0」を追加

時計のスクリプトがあります。すべて問題なく、問題なく動作しますが、問題が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);
21
Lukas

currentMinutesは数値であるため、lengthプロパティはありません。また、lengthcurrentMinutes要素に設定する前に、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;
    }
});
22
Marcelo De Zen

_.slice_を使用して、文字列の一部を抽出できます。文字列の最後からスライスするには、負の数を渡します。

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

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

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

上記は、currentMinutesが_100_の場合に "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()は機能しません。

30
David Hedlund

currentMinuteslengthではなく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(":");
9
alex

padStart()メソッドを使用してみてください。 MDNドキュメントに基づいて、padStart()メソッドは、文字列が目的の長さに達するまで別の文字列でパディングし続けます。 Link padStart()のMDNドキュメントに。

使用できる文字が4桁未満の場合、文字列を4桁にして、先頭にゼロを付けたい場合。 padStart()メソッドは、次のようにして救済できます。

let str = "34"

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

日付の例:

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

他の日除けに基づいて、次のコード行を作成しました。

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。

1
Johan Hoeksma

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

あなたは次のような単純なもので行くことができます:

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

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

1
dureuill

('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);
1
Developer_29

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

0
sms247