from - ¿Cómo puedo convertir una cadena a datetime con la especificación de formato en JavaScript?
string to datetime javascript (13)
@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 la new Date(blah)
para satisfacer sus necesidades.
Edición: Tal vez un poco más comprensible en ES6 usando 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 busco algo como Momento
¿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");
Creo que esto puede ayudarte: http://www.mattkruse.com/javascript/date/
Hay una función getDateFromFormat()
que puedes modificar un poco para resolver tu problema.
Actualización: hay una versión actualizada de las muestras disponibles en javascripttoolbox.com
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).
La biblioteca externa es una exageración para analizar una o dos fechas, así que hice mi propia función utilizando Christoph''s soluciones de Oli''s y Christoph''s . Aquí, en Europa central, rara vez usamos todo lo que no sea el formato OP, por lo que esto debería ser suficiente para las aplicaciones simples que se utilizan 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]));
}
}
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 de JavaScript" de Flagrant Badassery parece muy prometedor.
Para la conversión de entrada, ya se han hecho varias sugerencias. :)
Para satisfacer por completo la cadena de conversión Date.parse al formato dd-mm-YYYY como se especifica en RFC822, si utiliza el formato aaaa-mm-dd puede cometer un error.
Solo para dar mis 5 centavos.
Mi formato de fecha es dd.mm.yyyy (formato del Reino Unido) y ninguno de los ejemplos anteriores funcionó para mí. Todos los analizadores consideraban mm como día y dd como mes.
He encontrado esta biblioteca: http://joey.mazzarelli.com/2008/11/25/easy-date-parsing-with-javascript/ y funcionó, porque puedes decir el orden de los campos como este:
>>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.
Solo para una respuesta actualizada aquí, hay un buen js lib en http://www.datejs.com/
Use la new Date( dateString )
si su cadena es compatible con Date.parse()
. Si su formato es incompatible (creo que lo es), debe analizar la cadena (debería ser fácil con expresiones regulares) y crear un nuevo objeto Fecha con valores explícitos para año, mes, fecha, hora, minuto y segundo.
Moment.js se encargará de esto:
var momentDate = moment(''23.11.2009 12:34:56'', ''DD.MM.YYYY HH:mm:ss'');
var date = momentDate.;
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 salvar a 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 algún parseInt()
le permitirá hacer una fecha rápidamente.
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");
}
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