如果时钟有一位数,则加"0"

Luk*_*kas 16 javascript clock

我有一些时钟脚本.一切都很好,它的工作完美,但......我有一个问题.如果在时钟设置一位数小时或分钟,如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);
Run Code Online (Sandbox Code Playgroud)

Dav*_*und 25

您可以.slice用来提取字符串的一部分.将负数传递给它,以便从字符串的末尾切片.

因此,以下是可能的,而且非常简单:

('0'+currentMinutes).slice(-2)
Run Code Online (Sandbox Code Playgroud)

连接'0'确保操作的目标始终是字符串.('0'+currentMinutes)将产生2或3个字母的字符串(例如"07"或"017").从该字符串中删除最后两个字符将为您提供一个0位填充的两位数字.

请注意,如果currentMinutes100,则上面会产生"00" ,因此它假设您知道您将使用的值.

这可以提取到更可重用的东西:

Number.prototype.zeroPad = function() {
   return ('0'+this).slice(-2);
};
Run Code Online (Sandbox Code Playgroud)

那会让你写:

currentMinutes.zeroPad();
Run Code Online (Sandbox Code Playgroud)

您还可以设置填充变量的长度:

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);
};
Run Code Online (Sandbox Code Playgroud)

这可以称为:

currentMinutes.zeroPad(); // e.g. "07" or "17"
currentMinutes.zeroPad(3); // e.g. "007" or "017"
Run Code Online (Sandbox Code Playgroud)

请注意,虽然currentMinutes.zeroPad()会工作,7.zeroPad()但不会.

  • 像这样的天才代码片段就是我使用 S/O 的原因。简单明了,为什么我从来没有想到过这一点? (2认同)

Mar*_*Zen 20

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;
    }
});
Run Code Online (Sandbox Code Playgroud)


ale*_*lex 9

currentMinutes没有length财产,因为它是一个Number,而不是一个String.

你可以强迫它成为一个String.

if ((currentMinutes+'').length == 1) {
     currentMinutes = "0" + currentMinutes;
}
Run Code Online (Sandbox Code Playgroud)

但是,因为你有一个Number,你应该让你的条件......

if (currentMinutes < 10) {
     currentMinutes = "0" + currentMinutes;
}
Run Code Online (Sandbox Code Playgroud)

如果你特别疯狂,你可以......

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


小智 5

尝试使用该padStart()方法。根据 MDN 文档,该padStart()方法不断用另一个字符串填充字符串,直到达到所需的长度。在 padStart() 上链接到 MDN 文档。

如果您想将字符串格式化为 4 位带前导零的数字(如果可用数字少于 4 位)。该padStart()方法可以解决以下问题:

let str = "34"

str = str.padStart(4, "0") // results in "0034"
console.log(str)
Run Code Online (Sandbox Code Playgroud)

日期案例的一个例子:

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}`;
 
Run Code Online (Sandbox Code Playgroud)
<div id="date"></div>
Run Code Online (Sandbox Code Playgroud)