¿Cómo puedo convertir una cadena en un objeto de fecha y hora en JavaScript especificando una cadena de formato?
Estoy buscando algo como:
var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
¿Cómo puedo convertir una cadena en un objeto de fecha y hora en JavaScript especificando una cadena de formato?
Estoy buscando algo como:
var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
Respuestas:
Creo que esto puede ayudarte: http://www.mattkruse.com/javascript/date/
Hay una getDateFromFormat()función que puede ajustar un poco para resolver su problema.
Actualización: hay una versión actualizada de las muestras disponibles en javascripttoolbox.com
TypeError: Object Date has no method 'getDateFromFormat'
Úselo si su cadena es compatible con . Si su formato es incompatible (creo que lo es), debe analizar la cadena usted mismo (debería ser fácil con expresiones regulares) y crear un nuevo objeto Date con valores explícitos para año, mes, fecha, hora, minuto y segundo.new Date(dateString)Date.parse()
@ Christoph menciona el uso de una expresión regular para abordar el problema. Esto es lo que estoy usando:
var dateString = "2010-08-09 01:02:03";
var reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
var dateArray = reggie.exec(dateString);
var dateObject = new Date(
(+dateArray[1]),
(+dateArray[2])-1, // Careful, month starts at 0!
(+dateArray[3]),
(+dateArray[4]),
(+dateArray[5]),
(+dateArray[6])
);
De ninguna manera es inteligente, solo configure la expresión regular y se new Date(blah)adapte a sus necesidades.
Editar: Tal vez un poco más comprensible en ES6 usando la desestructuración:
let dateString = "2010-08-09 01:02:03"
, reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
, [, year, month, day, hours, minutes, seconds] = reggie.exec(dateString)
, dateObject = new Date(year, month-1, day, hours, minutes, seconds);
Pero con toda honestidad en estos días alcanzo algo como Momento
/gbandera, sólo para conjunto lastIndexde 0después? Simplemente no uses una coincidencia global.
/gfue una copia / pegado descuidada de un proyecto existente. lastindexfue agregado por un editor (para combatir el \gsupongo?). Los eliminaré ahora. Gracias por señalar eso.
No existen rutinas sofisticadas de formato de fecha / hora en JavaScript.
Tendrá que usar una biblioteca externa para la salida de fecha formateada, "Formato de fecha JavaScript" de Flagrant Badassery parece muy prometedor.
Para la conversión de entrada, ya se han hecho varias sugerencias. :)
Echa un vistazo a Moment.js . Es una biblioteca moderna y poderosa que compensa las lamentables funciones de fecha de JavaScript (o la falta de ellas).
Solo para obtener una respuesta actualizada aquí, hay una buena js lib en http://www.datejs.com/
Datejs es una biblioteca de fechas JavaScript de código abierto para analizar, formatear y procesar.
var temp1 = "";
var temp2 = "";
var str1 = fd;
var str2 = td;
var dt1 = str1.substring(0,2);
var dt2 = str2.substring(0,2);
var mon1 = str1.substring(3,5);
var mon2 = str2.substring(3,5);
var yr1 = str1.substring(6,10);
var yr2 = str2.substring(6,10);
temp1 = mon1 + "/" + dt1 + "/" + yr1;
temp2 = mon2 + "/" + dt2 + "/" + yr2;
var cfd = Date.parse(temp1);
var ctd = Date.parse(temp2);
var date1 = new Date(cfd);
var date2 = new Date(ctd);
if(date1 > date2) {
alert("FROM DATE SHOULD BE MORE THAN TO DATE");
}
La biblioteca externa es una exageración para analizar una o dos fechas, así que hice mi propia función usando las soluciones de Oli y Christoph . Aquí en Europa central raramente usamos algo más que el formato OP, por lo que esto debería ser suficiente para aplicaciones simples utilizadas aquí.
function ParseDate(dateString) {
//dd.mm.yyyy, or dd.mm.yy
var dateArr = dateString.split(".");
if (dateArr.length == 1) {
return null; //wrong format
}
//parse time after the year - separated by space
var spacePos = dateArr[2].indexOf(" ");
if(spacePos > 1) {
var timeString = dateArr[2].substr(spacePos + 1);
var timeArr = timeString.split(":");
dateArr[2] = dateArr[2].substr(0, spacePos);
if (timeArr.length == 2) {
//minutes only
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]));
} else {
//including seconds
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]), parseInt(timeArr[2]))
}
} else {
//gotcha at months - January is at 0, not 1 as one would expect
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1] - 1), parseInt(dateArr[0]));
}
}
Date.parse() es bastante inteligente pero no puedo garantizar que el formato se analice correctamente.
Si no es así, tendrías que encontrar algo para unir los dos. Su ejemplo es bastante simple (siendo puramente números), por lo que un toque de REGEX (o incluso string.split(), podría ser más rápido) emparejado con algunos parseInt()le permitirá hacer una cita rápidamente.
time = "2017-01-18T17:02:09.000+05:30"
t = new Date(time)
hr = ("0" + t.getHours()).slice(-2);
min = ("0" + t.getMinutes()).slice(-2);
sec = ("0" + t.getSeconds()).slice(-2);
t.getFullYear()+"-"+t.getMonth()+1+"-"+t.getDate()+" "+hr+":"+min+":"+sec
Solo para dar mis 5 centavos.
Mi formato de fecha es dd.mm.aaaa (formato del Reino Unido) y ninguno de los ejemplos anteriores funcionaba para mí. Todos los analizadores consideraban mm como día y dd como mes.
Encontré esta biblioteca: http://joey.mazzarelli.com/2008/11/25/easy-date-parsing-with-javascript/ y funcionó, porque puedes decir el orden de los campos de esta manera:
>>console.log(new Date(Date.fromString('09.05.2012', {order: 'DMY'})));
Wed May 09 2012 00:00:00 GMT+0300 (EEST)
Espero que ayude a alguien.
Moment.js se encargará de esto:
var momentDate = moment('23.11.2009 12:34:56', 'DD.MM.YYYY HH:mm:ss');
var date = momentDate.;
Puede usar la biblioteca moment.js para esto. Estoy usando solo para obtener resultados específicos de tiempo, pero puede seleccionar qué tipo de formato desea seleccionar.
Referencia:
1. biblioteca de momentos: https://momentjs.com/
2. funciones específicas de hora y fecha: https://timestamp.online/article/how-to-convert-timestamp-to-datetime-in-javascript
convertDate(date) {
var momentDate = moment(date).format('hh : mm A');
return momentDate;
}
y puedes llamar a este método como:
this.convertDate('2020-05-01T10:31:18.837Z');
Espero que ayude. Disfruta codificando.
Para satisfacer completamente el Date.parse, convierta la cadena al formato dd-mm-AAAA como se especifica en RFC822, si usa aaaa-mm-dd, el análisis puede cometer errores.
//Here pdate is the string date time
var date1=GetDate(pdate);
function GetDate(a){
var dateString = a.substr(6);
var currentTime = new Date(parseInt(dateString ));
var month =("0"+ (currentTime.getMonth() + 1)).slice(-2);
var day =("0"+ currentTime.getDate()).slice(-2);
var year = currentTime.getFullYear();
var date = day + "/" + month + "/" + year;
return date;
}