¿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
javascript
date
type-conversion
date-parsing
jslearner
fuente
fuente
Date -> String
oString -> Date
?Respuestas:
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
oYYYY-MM-DDTHH:MM:SS
.¡Pero espera! El simple uso del "formato ISO" no funciona de manera confiable por sí solo. 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 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 sobre MDN | Fecha y esta respuesta .
Para compatibilidad antigua de Internet Explorer (versiones decir, menos de 9 no son compatibles con el formato ISO en Fecha constructor), debe dividir representación de cadena de fecha y hora de sus partes y luego se puede utilizar el constructor de fecha y hora utilizando partes, 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 adecuada:
También puede aprovechar la biblioteca Moment.js que permite analizar la fecha con la zona horaria especificada.
fuente
new Date('2011-04-11T11:51:00')
la fecha de creación es válida.new Date('1970-30-02')
es una fecha no válida porque no hay 30 meses en un año. No puede desbordar los meses, pero cuando desborda los días, se resuelve en Chrome y Firefox a una fecha válida:new Date('1970-02-30')
es el mismo día que la nueva Fecha ('1970-03-02').Lamentablemente descubrí que
devuelve "Mié, 02 de abril de 2014". Sé que suena loco, pero sucede para algunos usuarios.
La solución a prueba de balas es la siguiente:
fuente
yyyy-MM-dd
se analizan como UTC y toString devuelve la hora local, por lo tanto, dependiendo de la zona horaria de los usuarios, definitivamente puede devolver resultados diferentes. Si siempre desea la hora como UTC, entonces debe usar toUTCString .Y la salida será:
fuente
fuente
.indexOf()
método ya que no es compatible con varios navegadores sin polyfils. En su lugar, use los métodos JS más compatibles.match()
o.test()
vainilla.var _delimiter = _format.match(/\W/g)[0];
al principio de la función puede obtener el delimitador automáticamente y prescindir del tercer parámetro.moment.js ( http://momentjs.com/ ) es un paquete completo y bueno para fechas de uso y admite cadenas ISO 8601 .
Puede agregar una fecha y formato de cadena.
Y puede verificar si una fecha es válida.
Algunos ejemplos de visualización
Consulte la documentación http://momentjs.com/docs/#/parsing/string-format/
fuente
let dt = moment("02-01-2019", "MM-DD-YYYY");console.log(dt.fromNow()+' | '+dt.format('LL'))
: "hace 3 meses | 1 de febrero de 2019"Pásalo como argumento a Date ():
Puede acceder a la fecha, mes, año, utilizando, por ejemplo:
dt.getMonth()
.fuente
console.log(new Date('30-08-2018'))
y obtengo una fecha no válida01/02/2020
en mi computadora (en el Reino Unido), devolverá el 1 de febrero, donde, como si se hiciera lo mismo en los EE. UU., Volverá el 2 de enero. Casi nunca deberías usar esta ingenua implementación. Utilizar momento en su lugar.Si puede usar la excelente biblioteca de momentos (por ejemplo, en un proyecto Node.js), puede analizar fácilmente su fecha usando, por ejemplo,
y puede acceder al objeto de fecha JS a través de
fuente
new Date(2000, 10, 1)
le dará "Mié Nov 01 2000 00:00:00 GMT + 0100 (CET)"Mira que 0 por mes te da enero
fuente
Para aquellos que buscan una solución pequeña e inteligente:
Ejemplo:
fuente
Sólo
new Date(st);
Asumiendo que es el formato correcto .
fuente
Si desea convertir desde el formato "dd / MM / aaaa". Aquí hay un ejemplo:
Esta solución funciona en versiones IE inferiores a 9.
fuente
Las marcas de tiempo se deben convertir a un número
fuente
undefined
valor? Así como:var date = new Date(undefined)
?Date.parse
casi te da lo que quieres. Se ahoga en la parteam
/pm
, pero con un poco de pirateo puede hacer que funcione:fuente
Convertir a formato pt-BR:
Espero ayudar a alguien !!!
fuente
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 le devolverá un objeto Date. https://jsfiddle.net/Sushil231088/q56yd0rp/
fuente
Para convertir cadenas a la fecha en js, uso
http://momentjs.com/
fuente
Hice esta función para convertir cualquier objeto de fecha en un objeto de fecha UTC.
fuente
Otra forma más de hacerlo:
fuente
Puedes probar esto:
fuente
o
la cadena de fecha en formato '01 -01-1970 'no funcionará en Firefox, así que mejor use "/" en lugar de "-" en la cadena de formato de fecha.
fuente
Si necesita verificar el contenido de la cadena antes de convertir al formato Fecha:
fuente
He creado la función parseDateTime para convertir la cadena al objeto de fecha y funciona 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
fuente
Esta respuesta se basa en la respuesta de Kassem, pero también maneja años de dos dígitos. Envié una edición a la respuesta de Kassem, pero en caso de que no fuera aprobada, también la enviaré como una respuesta separada.
fuente
Puede usar regex para analizar la cadena para detallar la hora y luego crear la fecha o cualquier formato de retorno como:
fuente
Actuación
Hoy (2020.05.08) realizo pruebas para las soluciones elegidas, para dos casos: la fecha de entrada es la cadena ISO8601 (Ad, Bd, Cd, Dd, Ed) y la fecha de entrada es la marca de tiempo (At, Ct, Dt). Las soluciones Bd, Cd, Ct no devuelven el objeto js Date como resultados, pero las agrego porque pueden ser útiles pero no las comparo con soluciones válidas. Estos resultados pueden ser útiles para el análisis masivo de fechas.
Conclusiones
new Date
(anuncio) es 50-100 veces más rápida que moment.js (Dd) para todos los navegadores con fecha y hora ISOnew Date
(anuncio) es ~ 10 veces más rápida queparseDate
(Ed)Date.parse
(Bd) es más rápida si es necesario obtener la marca de tiempo de la fecha ISO en todos los navegadoresDetalles
Realizo pruebas en MacOs High Sierra 10.13.6 en Chrome 81.0, Safari 13.1, Firefox 75.0. La solución
parseDate
(Ed) usanew Date(0)
y configura manualmente los componentes de fecha UTC.Mostrar fragmento de código
Resultados para el cromo
fuente
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 determinar qué formato de cadena de fechas 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"
en vez de"2014-10-13 23:57:52"
fuente
fuente
use este código: (mi problema se resolvió con este código)
}
fuente
Escribí una función reutilizable que uso cuando obtengo cadenas de fecha del servidor.
puede pasar su delimitador deseado (/ - etc.) que separa el día mes y año para usar el
split()
método.puedes verlo y probarlo en este ejemplo de trabajo .
fuente
Otra forma de hacerlo es construir una expresión regular con grupos de captura con nombre sobre la cadena de formato y luego usar esa expresión regular para extraer el día, mes y año de la cadena de fecha:
fuente