我有一些时钟脚本。一切都很好,它的工作完美,但......我有一个问题。如果在时钟设置一位数小时或分钟,如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);
答案 0 :(得分:21)
您可以使用.slice
来提取字符串的一部分。将负数传递给它,以便从字符串的末尾切片。
因此,以下是可能的,而且非常简单:
('0'+currentMinutes).slice(-2)
与'0'
连接可确保操作的目标始终为字符串。 ('0'+currentMinutes)
将产生2或3个字母的字符串(例如“07”或“017”)。从该字符串中删除最后两个字符将为您提供一个0位填充的两位数字。
请注意,如果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()
却不会。
答案 1 :(得分:19)
currentMinutes
是一个数字,因此它没有length
属性。此外,在将length
设置为currentMinutes
元素之前,您必须先检查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;
}
});
答案 2 :(得分: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(":");
答案 3 :(得分:1)
您还可以检查sprintf()是否有javascript。
你可以选择一些简单的东西:
sprintf("%02d:%02d", currentHours, currentMinutes);
使用接受格式化的功能可以在需要时对输出进行更多控制。
答案 4 :(得分:1)
基于其他的掠夺者,我创建了这行代码:
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。
答案 5 :(得分: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);
答案 6 :(得分:1)
尝试使用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>
答案 7 :(得分:0)
在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