Tengo algunos problemas para mostrar datos de mi API de backend porque las fechas entrantes tienen un formato incorrecto.
Actualmente, los números de día y mes se ingresan sin un '0' anterior si son menores que 10. Por ejemplo, 9 debería ser 09
Todas las fechas entrantes están en este formato: year/month/day .
¿Cómo puedo transformar las fechas a un formato con ceros anteriores para números menores de 10?
Mi código actual:
let date = '2021/1/31'; const addZeros = (date) => { const year = date.split('/')[0]; const month = date.split('/')[1]; const day = date.split('/')[2]; return `${year}-${month}-${day}`; }; console.log(addZeros(date));Pruebas:
2021/9/14 --> 2021/09/14
2021/1/7 --> 2021/01/07
2021/10/17 --> 2021/10/17
Puede lograr fácilmente el resultado usando dividir , mapear y unir .
function convertDate(str) { return str .split("/") .map((s) => (s < 10 ? `0${s}` : s)) .join("/"); } console.log(convertDate("2021/9/14")); //--> 2021/09/14 console.log(convertDate("2021/1/7")); //--> 2021/01/07 console.log(convertDate("2021/10/17")); //--> 2021/10/17const addZeros = (date) => { let [year, month, day] = date.split('/'); month = month.length == 1 ? `0${month}` : month; day = day.length == 1 ? `0${day}` : day; return `${year}-${month}-${day}`; }; const test = (date, formatDate) => { if ( addZeros(date) == formatDate ) console.log("Success!") else console.log(`Error: Expected: ${formatDate}, Receive: addZeros(date)`) } test('2021/1/31', '2021-01-31') test('2021/11/1', '2021-11-01')Yo uso este método simple para agregar ceros a la izquierda:
function leadingZeros(n, digitsneeded) { return ("00000000000" + n).substr(-digitsneeded) } // leadingzeros(3, 2) is "03" // leadingzeros(12, 5) is "00012" // leadingzeros(1234, 3) is "234" -- Be careful!No es necesario verificar si ya tiene el número correcto de dígitos. (Sin embargo, truncará un número "demasiado grande", así que tenga cuidado con eso).