Convertir una cadena a una fecha en JavaScript

¿Cómo puedo convertir una cadena en una 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 sintáctico de cadenas es el formato ISO de fecha junto con el constructor de objetos Fecha de JavaScript.

Ejemplos de formato ISO: YYYY-MM-DD o YYYY-MM-DDTHH:MM:SS .

¡Pero espera! Solo usar el “formato ISO” no funciona de manera confiable por sí mismo. Las cadenas a veces se analizan como UTC y, a veces, como localtime (según el proveedor y la versión del navegador). La mejor práctica siempre debe ser almacenar fechas como UTC y hacer 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 sobre MDN | Fecha y esta respuesta .

Para la compatibilidad con Internet Explorer anterior (las versiones IE menos de 9 no admiten el formato ISO en el constructor Fecha), debe dividir la representación de cadena de fecha y hora en sus partes y luego 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: use una biblioteca apropiada:

También puede aprovechar la biblioteca Moment.js que permite la fecha de análisis con la zona horaria especificada.

Desafortunadamente descubrí que

 var mydate = new Date('2014-04-03'); 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","-") 

Páselo como argumento a Date ():

 var st = "date in some format" var dt = new Date(st); 

Puede acceder a la fecha, mes, año usando, por ejemplo: dt.getMonth() .

new Date(2000, 10, 1) le dará “mié. 01 de noviembre de 2000 00:00:00 GMT + 0100 (CET)”

Mira que 0 por mes te da enero

Si puede usar la biblioteca de momentos increíbles (por ejemplo, en un proyecto Node.js), puede analizar fácilmente su fecha usando, por ejemplo,

 var momentDate = moment("2014-09-15 09:00:00"); 

y puede acceder al objeto de fecha JS a través de

 momentDate ().toDate(); 

moment.js ( http://momentjs.com/ ) es un paquete completo y bueno para las fechas de uso y es compatible con las cadenas ISO 8601 .

Puede agregar una fecha y formato de cadena.

 moment("12-25-1995", "MM-DD-YYYY"); 

Y podría verificar si la fecha es válida.

 moment("not a real date").isValid(); //Returns false 

Ver documentación http://momentjs.com/docs/#/parsing/string-format/

Recomendación: Recomiendo usar un paquete para las fechas que contiene muchos formatos, porque la gestión de la zona horaria y de la hora del formato es realmente un gran problema, el momento js resuelve muchos formatos. Podría analizar fácilmente una fecha de una cadena simple hasta la fecha, pero creo que es un trabajo difícil de admitir todos los formatos y variaciones de fechas.

Para aquellos que buscan una solución pequeña e inteligente:

 String.prototype.toDate = function(format) { var normalized = this.replace(/[^a-zA-Z0-9]/g, '-'); var normalizedFormat= format.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-'); var formatItems = normalizedFormat.split('-'); var dateItems = normalized.split('-'); var monthIndex = formatItems.indexOf("mm"); var dayIndex = formatItems.indexOf("dd"); var yearIndex = formatItems.indexOf("yyyy"); var hourIndex = formatItems.indexOf("hh"); var minutesIndex = formatItems.indexOf("ii"); var secondsIndex = formatItems.indexOf("ss"); var today = new Date(); var year = yearIndex>-1 ? dateItems[yearIndex] : today.getFullYear(); var month = monthIndex>-1 ? dateItems[monthIndex]-1 : today.getMonth()-1; var day = dayIndex>-1 ? dateItems[dayIndex] : today.getDate(); var hour = hourIndex>-1 ? dateItems[hourIndex] : today.getHours(); var minute = minutesIndex>-1 ? dateItems[minutesIndex] : today.getMinutes(); var second = secondsIndex>-1 ? dateItems[secondsIndex] : today.getSeconds(); return new Date(year,month,day,hour,minute,second); }; 

Ejemplo:

 "22/03/2016 14:03:01".toDate("dd/mm/yyyy hh:ii:ss"); "2016-03-29 18:30:00".toDate("yyyy-mm-dd hh:ii:ss"); 

Si desea convertir desde el formato “dd / MM / aaaa”. Aquí hay un ejemplo:

 var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/; var arrayDate = stringDate.match(pattern); var dt = new Date(arrayDate[3], arrayDate[2] - 1, arrayDate[1]); 

Esta solución funciona en versiones de IE menores que 9.

Las marcas de tiempo deben enviarse a un Número

 var ts = '1471793029764'; ts = Number(ts); // cast it to a Number var date = new Date(ts); // works var invalidDate = new Date('1471793029764'); // does not work. Invalid Date 

Date.parse casi te consigue lo que quieres. Se ahoga en la parte am / pm , pero con algunos hackeos puedes hacer que funcione:

 var str = 'Sun Apr 25, 2010 3:30pm', timestamp; timestamp = Date.parse(str.replace(/[ap]m$/i, '')); if(str.match(/pm$/i) >= 0) { timestamp += 12 * 60 * 60 * 1000; } 

echa un vistazo a la biblioteca de datejs http://www.datejs.com/

Solo new Date(st);

Asumiendo que es el formato apropiado.

Convertir para formatear pt-BR:

  var dateString = "13/10/2014"; var dataSplit = dateString.split('/'); var dateConverted; if (dataSplit[2].split(" ").length > 1) { var hora = dataSplit[2].split(" ")[1].split(':'); dataSplit[2] = dataSplit[2].split(" ")[0]; dateConverted = new Date(dataSplit[2], dataSplit[1]-1, dataSplit[0], hora[0], hora[1]); } else { dateConverted = new Date(dataSplit[2], dataSplit[1] - 1, dataSplit[0]); } 

Espero ayudar a alguien !!!

He creado un violín para esto, puede usar la función toDate () en cualquier cadena de fecha y proporcionar el formato de fecha. Esto te devolverá un objeto Date. https://jsfiddle.net/Sushil231088/q56yd0rp/

 "17/9/2014".toDate("dd/MM/yyyy", "/") 

Para invertir cadena a la fecha en js, uso http://momentjs.com/

 moment().format('MMMM Do YYYY, h:mm:ss a'); // August 16th 2015, 4:17:24 pm moment().format('dddd'); // Sunday moment().format("MMM Do YY"); // Aug 16th 15 moment().format('YYYY [escaped] YYYY'); // 2015 escaped 2015 moment("20111031", "YYYYMMDD").fromNow(); // 4 years ago moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago moment().startOf('day').fromNow(); // 16 hours ago moment().endOf('day').fromNow(); // in 8 hours 

Otra forma de hacerlo:

 String.prototype.toDate = function(format) { format = format || "dmy"; var separator = this.match(/[^0-9]/)[0]; var components = this.split(separator); var day, month, year; for (var key in format) { var fmt_value = format[key]; var value = components[key]; switch (fmt_value) { case "d": day = parseInt(value); break; case "m": month = parseInt(value)-1; break; case "y": year = parseInt(value); } } return new Date(year, month, day); }; a = "3/2/2017"; console.log(a.toDate("dmy")); // Date 2017-02-03T00:00:00.000Z 

Hice esta función para convertir cualquier objeto Date a un objeto Date de UTC.

 function dateToUTC(date) { return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()); } dateToUTC(new Date()); 
 var date = new Date(year, month, day); 

o

 var date = new Date('01/01/1970'); 

la cadena de fecha en el formato ’01 -01-1970 ‘no funcionará en Firefox, así que es mejor utilizar “/” en lugar de “-” en la cadena de formato de fecha.

Si necesita verificar el contenido de la cadena antes de convertirla al formato de Fecha:

 // Convert 'M/D/YY' to Date() mdyToDate = function(mdy) { var d = mdy.split(/[\/\-\.]/, 3); if (d.length != 3) return null; // Check if date is valid var mon = parseInt(d[0]), day = parseInt(d[1]), year= parseInt(d[2]); if (d[2].length == 2) year += 2000; if (day < = 31 && mon <= 12 && year >= 2015) return new Date(year, mon - 1, day); return null; } 
 var a = "13:15" var b = toDate(a, "h:m") alert(b); function toDate(dStr, format) { var now = new Date(); if (format == "h:m") { now.setHours(dStr.substr(0, dStr.indexOf(":"))); now.setMinutes(dStr.substr(dStr.indexOf(":") + 1)); now.setSeconds(0); return now; } else return "Invalid Format"; } 

Las cadenas de fechas ISO 8601-esque, tan excelentes como el estándar, todavía no son ampliamente compatibles.

Este es un gran recurso para descubrir qué formato de fechado debe usar:

http://dygraphs.com/date-formats.html

Sí, eso significa que su cadena de fechas podría ser tan simple como opuesta a

"2014/10/13 23:57:52" vez de "2014-10-13 23:57:52"

  //little bit of code for Converting dates var dat1 = document.getElementById('inputDate').value; var date1 = new Date(dat1)//converts string to date object alert(date1); var dat2 = document.getElementById('inputFinishDate').value; var date2 = new Date(dat2) alert(date2); 

usa este código: (mi problema fue resuelto con este código)

 function dateDiff(date1, date2){ var diff = {} // Initialisation du retour var tmp = date2 - date1; tmp = Math.floor(tmp/1000); // Nombre de secondes entre les 2 dates diff.sec = tmp % 60; // Extraction du nombre de secondes tmp = Math.floor((tmp-diff.sec)/60); // Nombre de minutes (partie entière) diff.min = tmp % 60; // Extraction du nombre de minutes tmp = Math.floor((tmp-diff.min)/60); // Nombre d'heures (entières) diff.hour = tmp % 24; // Extraction du nombre d'heures tmp = Math.floor((tmp-diff.hour)/24); // Nombre de jours restants diff.day = tmp; return diff; 

}

He creado la función parseDateTime para convertir el objeto de cadena a fecha y está funcionando en todos los navegadores (incluido el navegador IE), verifique si alguien lo requiere, consulte https://github.com/Umesh-Markande/Parse-String-to-Date -en-todo-navegador

  function parseDateTime(datetime) { var monthNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; if(datetime.split(' ').length == 3){ var date = datetime.split(' ')[0]; var time = datetime.split(' ')[1].replace('.00',''); var timearray = time.split(':'); var hours = parseInt(time.split(':')[0]); var format = datetime.split(' ')[2]; var bits = date.split(/\D/); date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits ex ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/ var day = date.getDate(); var monthIndex = date.getMonth(); var year = date.getFullYear(); if ((format === 'PM' || format === 'pm') && hours !== 12) { hours += 12; try{ time = hours+':'+timearray[1]+':'+timearray[2] }catch(e){ time = hours+':'+timearray[1] } } var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + ' ' + year + ' ' + time); return formateddatetime; }else if(datetime.split(' ').length == 2){ var date = datetime.split(' ')[0]; var time = datetime.split(' ')[1]; var bits = date.split(/\D/); var datetimevalue = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits ex ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/ var day = datetimevalue.getDate(); var monthIndex = datetimevalue.getMonth(); var year = datetimevalue.getFullYear(); var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + ' ' + year + ' ' + time); return formateddatetime; }else if(datetime != ''){ var bits = datetime.split(/\D/); var date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits ex ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/ return date; } return datetime; } var date1 = '2018-05-14 05:04:22 AM'; // yyyy-mm-dd hh:mm:ss A var date2 = '2018/05/14 05:04:22 AM'; // yyyy/mm/dd hh:mm:ss A var date3 = '2018/05/04'; // yyyy/mm/dd var date4 = '2018-05-04'; // yyyy-mm-dd var date5 = '2018-05-14 15:04:22'; // yyyy-mm-dd HH:mm:ss var date6 = '2018/05/14 14:04:22'; // yyyy/mm/dd HH:mm:ss console.log(parseDateTime(date1)) console.log(parseDateTime(date2)) console.log(parseDateTime(date3)) console.log(parseDateTime(date4)) console.log(parseDateTime(date5)) console.log(parseDateTime(date6)) **Output---** Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time) Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time) Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time) Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time) Mon May 14 2018 15:04:22 GMT+0530 (India Standard Time) Mon May 14 2018 14:04:22 GMT+0530 (India Standard Time) 

Puede usar regex para analizar la cadena para detallar el tiempo y luego crear la fecha o cualquier formato de retorno como:

 //example : let dateString = "2018-08-17 01:02:03.4" function strToDate(dateString){ let reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}).(\d{1})/ , [,year, month, day, hours, minutes, seconds, miliseconds] = reggie.exec(dateString) , dateObject = new Date(year, month-1, day, hours, minutes, seconds, miliseconds); return dateObject; } alert(strToDate(dateString)); 

usa este formato …

 //get current date in javascript var currentDate=New Date(); // for getting a date from a textbox as string format var newDate=document.getElementById("< %=textBox1.ClientID%>").value; // convert this date to date time var MyDate=New Date(newDate); 

También puede hacer: mydate.toLocaleDateString ();