separador - rellenar string con ceros a la izquierda javascript
¿Cómo dar formato a los números anteponiendo 0 a números de un solo dígito? (27)
Quiero formatear un número para tener dos dígitos. El problema se produce cuando se pasa 0
- 9
, por lo que necesito que se formatee a 00
- 09
.
¿Hay un formateador de números en JavaScript?
Aquí está mi versión. Puede adaptarse fácilmente a otros escenarios.
function setNumericFormat(value) {
var length = value.toString().length;
if (length < 4) {
var prefix = "";
for (var i = 1; i <= 4 - length; i++) {
prefix += "0";
}
return prefix + value.toString();
}
return value.toString();
}
Aquí hay una función de relleno numérico simple que uso habitualmente. Permite cualquier cantidad de relleno.
function leftPad(number, targetLength) {
var output = number + '''';
while (output.length < targetLength) {
output = ''0'' + output;
}
return output;
}
Ejemplos:
leftPad(1, 2) // 01
leftPad(10, 2) // 10
leftPad(100, 2) // 100
leftPad(1, 3) // 001
leftPad(1, 8) // 00000001
Aquí hay una solución recursiva simple que funciona para cualquier número de dígitos.
function numToNDigitStr(num, n)
{
if(num >= Math.pow(10, n - 1)) { return num; }
return "0" + numToNDigitStr(num, n-1);
}
Con esta función puede imprimir con los n dígitos que desee.
function frmtDigit(num, n) {
isMinus = num < 0;
if (isMinus)
num *= -1;
digit = '''';
if (typeof n == ''undefined'')
n = 2;//two digits
for (i = 1; i < n; i++) {
if (num < (1 + Array(i + 1).join("0")))
digit += ''0'';
}
digit = (isMinus ? ''-'' : '''') + digit + num;
return digit;
};
Construí una función de formato bastante simple a la que llamo cuando necesito una fecha simple formateada. Se trata de dar formato a un dígito a doble dígito cuando tienen menos de 10. Sat Sep 29 2018 - 00:05:44
una fecha formateada como el Sat Sep 29 2018 - 00:05:44
Esta función se utiliza como parte de una variable de utils, por lo que se llama como:
let timestamp = utils._dateFormatter(''your date string'');
var utils = {
_dateFormatter: function(dateString) {
let d = new Date(dateString);
let hours = d.getHours();
let minutes = d.getMinutes();
let seconds = d.getSeconds();
d = d.toDateString();
if (hours < 10) {
hours = ''0'' + hours;
}
if (minutes < 10) {
minutes = ''0'' + minutes;
}
if (seconds < 10) {
seconds = ''0'' + seconds;
}
let formattedDate = d + '' - '' + hours + '':'' + minutes + '':'' + seconds;
return formattedDate;
}
}
El mejor método que he encontrado es el siguiente (tenga en cuenta que esta versión simple solo funciona para enteros positivos):
var myNumber = 7;
var formattedNumber = ("0" + myNumber).slice(-2);
console.log(formattedNumber);
Para decimales, puedes usar este código (aunque es un poco descuidado).
var myNumber = 7.5;
var dec = myNumber - Math.floor(myNumber);
myNumber = myNumber - dec;
var formattedNumber = ("0" + myNumber).slice(-2) + dec.toString().substr(1);
console.log(formattedNumber);
Por último, si tiene que lidiar con la posibilidad de números negativos, es mejor almacenar el signo, aplicar el formato al valor absoluto del número y volver a aplicar el signo después del hecho. Tenga en cuenta que este método no restringe el número a 2 dígitos totales. En su lugar, solo restringe el número a la izquierda del decimal (la parte entera). (La línea que determina el signo se encontró aquí: Number.sign () en javascript )
var myNumber = -7.2345;
var sign = myNumber?myNumber<0?-1:1:0;
myNumber = myNumber * sign + ''''; // poor man''s absolute value
var dec = myNumber.match(//./d+$/);
var int = myNumber.match(/^[^/.]+/);
var formattedNumber = (sign < 0 ? ''-'' : '''') + ("0" + int).slice(-2) + (dec !== null ? dec : '''');
console.log(formattedNumber);
En todos los navegadores modernos puedes usar
numberStr.padStart(2, "0");
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
function zeroPad(numberStr) {
return numberStr.padStart(2, "0");
}
var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
numbers.forEach(
function(num) {
var numString = num.toString();
var paddedNum = zeroPad(numString);
console.log(paddedNum);
}
);
Esto es simple y funciona bastante bien:
function twoDigit(number) {
var twodigit = number >= 10 ? number : "0"+number.toString();
return twodigit;
}
La respuesta de @ Lifehack fue muy útil para mí; donde creo que podemos hacerlo en una línea para números positivos
String(input).padStart(2, ''0'');
No hay un formateador de números incorporado para JavaScript, pero hay algunas bibliotecas que lo logran:
- underscore.string proporciona una función sprintf (junto con muchos otros formateadores útiles)
- javascript-sprintf , que hace hincapié en las secuencias de préstamos.
Para cualquier persona que quiera tener diferencias de tiempo y resultados que puedan tomar números negativos aquí es una buena idea. pad (3) = "03", pad (-2) = "-02", pad (-234) = "-234"
pad = function(n){
if(n >= 0){
return n > 9 ? "" + n : "0" + n;
}else{
return n < -9 ? "" + n : "-0" + Math.abs(n);
}
}
Parece que podría tener una cadena, en lugar de un número. utilizar esta:
var num = document.getElementById(''input'').value,
replacement = num.replace(/^(/d)$/, ''0$1'');
document.getElementById(''input'').value = replacement;
Aquí hay un ejemplo: http://jsfiddle.net/xtgFp/
Sé que esta es una publicación antigua, pero quería ofrecer una opción de solución OO más flexible.
He extrapolado un poco la respuesta aceptada y extendí el objeto Number
de javascript para permitir el relleno cero ajustable:
Number.prototype.zeroPad = function(digits) {
var loop = digits;
var zeros = "";
while (loop) {
zeros += "0";
loop--;
}
return (this.toString().length > digits) ?
this.toString() : (zeros + this).slice(-digits);
}
var v = 5;
console.log(v.zeroPad(2)); // returns "05"
console.log(v.zeroPad(4)); // returns "0005"
Editar: agregue código para evitar cortar números más largos que los dígitos solicitados.
NOTA: Esto es obsoleto en todos menos en IE. Utilice padStart()
lugar.
Si desea limitar sus dígitos al mismo tiempo:
function pad2(number) {
number = (number < 10 ? ''0'' : '''') + number;
number = number.substring(0,2);
return number;
}
Esto también cortaría cualquier valor que exceda dos dígitos. He estado extendiendo esto sobre la solución de Fanaur.
Si el número es mayor que 9, convierta el número en una cadena (consistencia). De lo contrario, agregue un cero.
function n(n){
return n > 9 ? "" + n: "0" + n;
}
n( 9); //Returns "09"
n(10); //Returns "10"
n(999);//Returns "999"
Si no tiene lodash en su proyecto, será una exageración agregar la biblioteca completa solo para usar una función. Esta es la solución más sofisticada de su problema que he visto.
_.padStart(num, 2, ''0'')
Tu puedes hacer:
function pad2(number) {
return (number < 10 ? ''0'' : '''') + number
}
Ejemplo:
document.write(pad2(0) + ''<br />'');
document.write(pad2(1) + ''<br />'');
document.write(pad2(2) + ''<br />'');
document.write(pad2(10) + ''<br />'');
document.write(pad2(15) + ''<br />'');
Resultado:
00
01
02
10
15
Un trazador de líneas rápido y sucio ....
function zpad(n, len) {
return 0..toFixed(len).slice(2,-n.toString().length)+n.toString();
}
Utilice el método toLocaleString () en cualquier número. Entonces, para el número 6, como se ve a continuación, puede obtener los resultados deseados.
(6).toLocaleString(''en-US'', {minimumIntegerDigits: 2, useGrouping:false})
Se generará la cadena ''06''.
Versión mejorada de la respuesta anterior.
function atLeast2Digit(n){
n = parseInt(n); //ex. if already passed ''05'' it will be converted to number 5
var ret = n > 9 ? "" + n: "0" + n;
return ret;
}
alert(atLeast2Digit(5));
o
function zpad(n,l){
return rep(l-n.toString().length, ''0'') + n.toString();
}
con
function rep(len, chr) {
return new Array(len+1).join(chr);
}
`${number}`.replace(/^(/d)$/, ''0$1'');
Regex es el mejor.
AS El tipo de datos en Javascript se determina dinámicamente, trata a 04 como 4 Usa una declaración condicional si el valor es menor que 10 y luego agrega 0 antes de que sea cadena de caracteres Eg,
var x=4;
x = x<10?"0"+x:x
console.log(x); // 04
mi ejemplo sería :
<div id="showTime"></div>
function x() {
var showTime = document.getElementById("showTime");
var myTime = new Date();
var hour = myTime.getHours();
var minu = myTime.getMinutes();
var secs = myTime.getSeconds();
if (hour < 10) {
hour = "0" + hour
};
if (minu < 10) {
minu = "0" + minu
};
if (secs < 10) {
secs = "0" + secs
};
showTime.innerHTML = hour + ":" + minu + ":" + secs;
}
setInterval("x()", 1000)
function colorOf(r,g,b){
var f = function (x) {
return (x<16 ? ''0'' : '''') + x.toString(16)
};
return "#" + f(r) + f(g) + f(b);
}
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$(''#test'').keypress(allowOnlyTwoPositiveDigts);
});
function allowOnlyTwoPositiveDigts(e){
var test = /^[/-]?[0-9]{1,2}?$/
return test.test(this.value+String.fromCharCode(e.which))
}
</script>
</head>
<body>
<input id="test" type="text" />
</body>
</html>
("0" + (date.getMonth() + 1)).slice(-2);
("0" + (date.getDay())).slice(-2);