31

我有一些时钟脚本。一切都很好,它工作得很好,但是......我有一个问题。如果时钟设置为一位数字小时或分钟,如 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);
4

9 回答 9

49

您可以使用它.slice来提取字符串的一部分。向它传递一个负数,以便从字符串的末尾进行切片。

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

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

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

请注意,如果currentMinutesis ,上面将产生“00” 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()但不会。

于 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属性,因为它是 a Number,而不是 a 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 回答
7

尝试使用该padStart()方法。基于 MDN 文档,该padStart()方法不断用另一个字符串填充字符串,直到达到所需的长度。链接到 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>

于 2019-07-19T10:17:53.503 回答
1

您还可以检查sprintf()的 javascript。

您可以使用以下简单的方法:

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

使用接受格式化的函数可以让您在需要时更好地控制输出。

于 2012-09-05T09:28:33.587 回答
1

在安卓中(内置)

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

于 2016-04-02T14:10:00.683 回答
1

基于其他 awnsers,我创建了这行代码:

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>

铜下次。

于 2017-01-27T12:37:31.343 回答
1

尝试使用('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);
于 2018-09-17T00:48:58.117 回答
0

你可以根据长度来做。

我的解决方案是

  var mnt = '' + (seconds / 60).toFixed();
  if (mnt.length == 1) mnt = '0' + mnt;
  var sec = '' + (seconds % 60).toFixed();
  if (sec.length == 1) sec = '0' + sec;
  return `${mnt}:${sec}`;
于 2021-10-24T09:44:43.150 回答