JavaScript格式编号为天,总是3位数

时间:2012-05-31 21:50:23

标签: javascript numbers format digits days

  

可能重复:
  How can I create a Zerofilled value using JavaScript?

我必须输出一个必须始终有3位数的日期编号。而不是 3 它必须写 003 ,而不是 12 ,它必须写 012 。如果大于 100 输出,则不进行格式化。 我想知道是否有一个我可以使用的正则表达式或一些快速的内联脚本,或者我必须创建一个应该这样做并返回结果的函数。谢谢!

6 个答案:

答案 0 :(得分:20)

怎么样:

 zeroFilled = ('000' + x).substr(-3)

任意宽度:

 zeroFilled = (new Array(width).join('0') + x).substr(-width)

根据评论,这似乎更准确:

lpad = function(s, width, char) {
    return (s.length >= width) ? s : (new Array(width).join(char) + s).slice(-width);
}

答案 1 :(得分:3)

我在his blog找到了Samuel Mullen的优雅解决方案。我只是优化了zeroes创建。

function lpad(value, padding) {
    var zeroes = new Array(padding+1).join("0");
    return (zeroes + value).slice(-padding);
}

用法:lpad(12, 3)会产生"012"

答案 2 :(得分:1)

这是一个简单的函数,用零填充一个数字到一定的宽度:

function zeroFill(number, width) {
    width -= number.toString().length;
    if(width > 0) {
        return new Array(width + (/\./.test(number) ? 2 : 1)).join('0') + number;
    }
    return number + ""; // always return a string
}

(来自How can I pad a value with leading zeros?

由于原始答案没有解释该功能如何运作,我将在这里做。

width最初包含您想要的总长度,因此width - number_of_digits是必需的填充字符数。
new Array(len + 1).join(str)重复str len次 正则数字用于在包含小数点的数字的情况下添加额外的填充零,因为该点也包含在使用number_of_digits

确定的number.toString().length

答案 3 :(得分:1)

一种可能的解决方案:

​while ((val+"").length < 3​) {
    val = "0" + val;
}

DEMO: http://jsfiddle.net/WfXVn/

答案 4 :(得分:1)

你可以这样做......

("00" + day).slice(-3)

它会在前面添加零,然后.slice()将始终为您提供该字符串的最后3个值。

答案 5 :(得分:1)

我会写下面这个函数:

var pad = function(n, length) {
    var str = "" + n;
    if(str.length < length) str = new Array(length - str.length).join("0") + str;
    return str;
};