javascript - new - node.js convert string to date format
Convertir una cadena a una fecha en JavaScript (30)
¿Cómo puedo convertir una cadena a una fecha en JavaScript?
var st = "date in some format"
var dt = new date();
var dt_st= //st in date format same as dt
Las marcas de tiempo se deben convertir 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
Convertir a formato 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 !!!
Debes hacer tu propia función . Esto será más conveniente . Aquí está el ejemplo. Puede modificarlo de acuerdo a su requerimiento.
const dateFormater = function(dt, seprator){
let monthStore = ["January","February","March","April","May","June", "July","August","September","October","November","December"];
const date = dt.split(seprator);
//below choose month, day, year in the same order you passed in function as string
const month = monthStore[date[0]-1];
const day = date[1];
const year = date[2];
const dateToReturn = month+'' ''+day+'' ''+year // you can change order to print as required
return(dateToReturn)
}
var formatedDate = dateFormater(''12/11/2018'',''/''); // /m/d/y
var formatedDate2 = dateFormater(''09-10-2018'',''-'');
console.log(formatedDate);
console.log(formatedDate2 )
El mejor formato de cadena para el análisis 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! El solo uso del "formato ISO" no funciona de manera confiable por sí mismo. Las cadenas a veces se analizan como UTC y otras como hora local (según el proveedor y la versión del navegador). La mejor práctica siempre debe 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 la compatibilidad anterior de Internet Explorer (las versiones de IE de menos de 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 utilizando 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 momentjs.com que permite analizar la fecha con la zona horaria especificada.
He creado la función parseDateTime para convertir la cadena en un objeto de 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-in-all-browser
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 e.x ( 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 e.x ( 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 e.x ( 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)
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", "/")
Hice esta función para convertir cualquier objeto Date en un objeto Date UTC.
function dateToUTC(date) {
return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}
dateToUTC(new Date());
ISO 8601-esque datestrings, tan excelente como es el estándar, todavía no son ampliamente compatibles.
Este es un gran recurso para averiguar qué formato de datstring debe usar:
http://dygraphs.com/date-formats.html
Sí, eso significa que su eliminación de datos podría ser tan simple como opuesta a
"2014/10/13 23:57:52"
lugar de "2014-10-13 23:57:52"
Lamentablemente descubrí que
var mydate = new Date(''2014-04-03'');
console.log(mydate.toDateString());
devuelve "mié abr 02 2014". Sé que suena loco, pero sucede para 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());
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
Pásalo 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()
.
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");
Para convertir una cadena hasta la fecha en js i use 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
Puede usar expresiones regulares para analizar la cadena para detallar la hora y luego crear la fecha o cualquier formato de devolución 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));
Puedes probar esto:
function formatDate(userDOB) {
const dob = new Date(userDOB);
const monthNames = [
''January'', ''February'', ''March'',
''April'', ''May'', ''June'', ''July'',
''August'', ''September'', ''October'',
''November'', ''December''
];
const day = dob.getDate();
const monthIndex = dob.getMonth();
const year = dob.getFullYear();
// return day + '' '' + monthNames[monthIndex] + '' '' + year;
return `${day} ${monthNames[monthIndex]} ${year}`;
}
console.log(formatDate(''1982-08-10''));
Sólo new Date(st);
Suponiendo que es el formato adecuado.
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 inferiores a 9.
Si necesita verificar el contenido de la cadena antes de convertir 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;
}
Si puede usar la excelente biblioteca de momentjs.com (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 fecha JS a través de
momentDate ().toDate();
También puede hacer: mydate.toLocaleDateString ();
echa un vistazo a la biblioteca de datejs http://www.datejs.com/
moment.js ( momentjs.com ) es un paquete completo y bueno para fechas de uso y admite cadenas ISO 8601 .
Usted podría agregar la fecha de cadena y el formato.
moment("12-25-1995", "MM-DD-YYYY");
Y puedes comprobar si una fecha es válida.
moment("not a real date").isValid(); //Returns false
Consulte la documentación http://momentjs.com/docs/#/parsing/string-format/
Recomendación: Recomiendo usar un paquete para fechas que contengan muchos formatos, ya que la zona horaria y la gestión del tiempo de los formatos es realmente un gran problema, en este momento j resuelven muchos formatos. Podría analizar fácilmente una fecha desde una cadena simple hasta la fecha, pero creo que es un trabajo difícil admitir todos los formatos y variaciones de fechas.
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;
}
Date.parse
casi te consigue lo que quieres. Se ahoga en la parte am
/ pm
, pero con algo de piratería puede 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;
}
new Date(2000, 10, 1)
le dará "Mié 01 de noviembre 2000 00:00:00 GMT + 0100 (CET)"
Mira que 0 por mes te da enero.
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";
}
//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);
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","-")
var date = new Date(year, month, day);
o
var date = new Date(''01/01/1970'');
la cadena de fecha en formato ''01 -01-1970 ''no funcionará en FireFox, por lo que es mejor usar "/" en lugar de "-" en la cadena de formato de fecha.
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}