Estoy tratando de ayudar a un amigo con el siguiente javascript. Ambos somos nuevos en javascript.
Estamos tratando de convertir la cadena de fecha a un formato diferente. Según la búsqueda en Internet, entendemos que la función de fecha espera que la cadena de entrada tenga el formato Fecha (año, mes, día). Para lograr eso, necesitamos analizar la cadena de entrada y enviarla en el formato esperado. No tenemos ni idea de por qué la división de cadenas en el contenido de texto de la etiqueta span (que contiene la cadena de fecha) no funciona.
<script type="text/javascript"> function ready(callback){ if (document.readyState!='loading') callback(); else if (document.addEventListener) document.addEventListener('DOMContentLoaded', callback); else document.attachEvent('onreadystatechange', function(){ if (document.readyState=='complete') callback(); }); } window.onload = ready(function() { var dateString = document.getElementById("dateFormatter").textContent.trim(); var sMonth = dateString.split("/")[0]; var sDay = dateString.split("/")[1]; var sYear = dateString.split("/")[2]; document.getElementById("dateFormatter").textContent=sMonth; }); </script>El html tiene la siguiente etiqueta de intervalo.
<span id="dateFormatter">26/06/1993</span>sMonth devuelve 26/06/1993, mientras que sDay y sYear devuelven indefinidos.
La cadena de su div tiene un formato no válido si desea convertirla en una cadena de fecha. Una cadena válida sería: aaaa-mm-dd. Si ya tiene un objeto de fecha, puede usar la función para formatear la fecha.
Como eso:
callback(); window.addEventListener('load', function () { var dateString = document.getElementById("dateFormatter").textContent.trim(); console.log(dateString) let dateArr = dateString.split("/"); var sDay = dateArr[0]; var sMonth = dateArr[1]; var sYear = dateArr[2]; let newDateString = (sYear + '-' + sMonth + '-' + sDay); let d = new Date(newDateString); console.log(d); document.getElementById("dateFormatter").textContent=d.toLocaleString(); }); <span id="dateFormatter">26/06/1993</span> function ready(callback) { if (document.readyState!='loading') callback(); else if (document.addEventListener) document.addEventListener('DOMContentLoaded', callback); else document.attachEvent('onreadystatechange', function(){ if (document.readyState=='complete') callback(); }); } window.onload = ready(function() { var dateString = document.getElementById("dateFormatter").textContent.trim(); console.log(dateString) let dateArr = dateString.split("/"); var sDay = dateArr[0]; var sMonth = dateArr[1]; var sYear = dateArr[2]; let newDateString = (sYear + '-' + sMonth + '-' + sDay); let d = new Date(newDateString); console.log(d); document.getElementById("dateFormatter").textContent=d; }); <span id="dateFormatter">26/06/1993</span>El problema es que está configurando el contenido de texto del lapso para que solo muestre el valor de sMonth y cuando eso suceda, el lapso solo tendrá "26" como su cuerpo (que por cierto es incorrecto si escribe fechas así) - y en realidad no debería ser "26/06/1993" si el código es correcto.
Además, si desea ejecutar la secuencia de comandos varias veces, intente establecer el contenido de texto del tramo en sDay+"/"+sMonth+"/"+sYear para que tenga el mismo formato con el que espera que funcione la secuencia de comandos. El código que proporcionó establece el valor del lapso en "26", luego, si lo ejecuta nuevamente, intenta dividir "26" a lo largo de "/", lo que, por supuesto, termina siendo incorrecto.