Analizando una cadena a una fecha en JavaScript
¿Cómo puedo convertir una cadena en un objeto Fecha en JavaScript?
var st = "date in some format"
var dt = new Date();
var dt_st = // st in Date format, same as dt.
El mejor formato de cadena para el análisis de cadenas es el formato ISO de fecha junto con el constructor del objeto Fecha de JavaScript.
Ejemplos de formato ISO: YYYY-MM-DD
o YYYY-MM-DDTHH:MM:SS
.
¡Pero espera! El simple hecho de utilizar el "formato ISO" no funciona de forma fiable por sí solo. A veces, las cadenas se analizan como UTC y, a veces, como hora local (según el proveedor y la versión del navegador). La mejor práctica siempre debería ser almacenar las fechas como UTC y realizar cálculos como UTC.
Para analizar una fecha como UTC, agregue una Z , por ejemplo: new Date('2011-04-11T10:20:30Z')
.
Para mostrar una fecha en UTC, use .toUTCString()
,
para mostrar una fecha en la hora local del usuario, use .toString()
.
Más información en MDN | Fecha y esta respuesta .
Para compatibilidad con Internet Explorer antiguo (las versiones de IE inferiores a 9 no admiten el formato ISO en el constructor de fecha), debe dividir la representación de la cadena de fecha y hora en sus partes y luego puede usar el constructor usando partes de fecha y hora, por ejemplo: new Date('2011', '04' - 1, '11', '11', '51', '00')
. Tenga en cuenta que el número del mes debe ser 1 menos.
Método alternativo: utilice una biblioteca adecuada:
También puede aprovechar la biblioteca Moment.js que permite analizar la fecha con la zona horaria especificada.
Desgraciadamente descubrí que
var mydate = new Date('2014-04-03');
console.log(mydate.toDateString());
devuelve "miércoles 02 de abril de 2014". Sé que suena loco, pero les sucede a algunos usuarios.
La solución a prueba de balas es la siguiente:
var parts ='2014-04-03'.split('-');
// Please pay attention to the month (parts[1]); JavaScript counts months from 0:
// January - 0, February - 1, etc.
var mydate = new Date(parts[0], parts[1] - 1, parts[2]);
console.log(mydate.toDateString());
var st = "26.04.2013";
var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
var dt = new Date(st.replace(pattern,'$3-$2-$1'));
Y la salida será:
dt => Date {Fri Apr 26 2013}
function stringToDate(_date,_format,_delimiter)
{
var formatLowerCase=_format.toLowerCase();
var formatItems=formatLowerCase.split(_delimiter);
var dateItems=_date.split(_delimiter);
var monthIndex=formatItems.indexOf("mm");
var dayIndex=formatItems.indexOf("dd");
var yearIndex=formatItems.indexOf("yyyy");
var month=parseInt(dateItems[monthIndex]);
month-=1;
var formatedDate = new Date(dateItems[yearIndex],month,dateItems[dayIndex]);
return formatedDate;
}
stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")