yyyy change javascript jquery asp.net date

change - cómo analizar una cadena de fecha formateada "dd/mm/aaaa" o "dd-mm-aaaa" o "dd-mmm-aaaa" usando JavaScript o jQuery



short date javascript (5)

Es posible que desee utilizar la biblioteca auxiliar como http://momentjs.com/ que envuelve el objeto de fecha nativo de JavaScript para facilitar las manipulaciones.

Entonces puedes hacer cosas como:

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

o

var day = moment("25/12/1995", "DD/MM/YYYY");

luego operar en la fecha

day.add(''days'', 7)

y para obtener la fecha nativa de javascript

day.toDate();

Posible duplicado:
¿Está extendiendo Date.parse de JavaScript para permitir DD / MM / YYYY (fechas formateadas fuera de EE. UU.)?
Convertir cadena dd-mm-aaaa hasta la fecha

Introdujo una fecha en el cuadro de texto, por ejemplo: 05/09/1985 , y yo quería convertirlo al formato 05-Sep-1985 (dd-MMM-aaaa). ¿Cómo lograría esto? Tenga en cuenta que el formato de origen puede ser dd-mm-yyyy o dd/mm/yyyy o dd-mmm-yyyy .

Fragmento de código:

function GetDateFormat(controlName) { if ($(''#'' + controlName).val() != "") { var d1 = Date.parse($(''#'' + controlName).val()); if (d1 == null) { alert(''Date Invalid.''); $(''#'' + controlName).val(""); } var array = d1.toString(''dd-MMM-yyyy''); $(''#'' + controlName).val(array); } }

Este código devuelve 09 de mayo de 1985, pero quiero 05-Sep-1985 . Gracias.


Prueba esto:

function GetDateFormat(controlName) { if ($(''#'' + controlName).val() != "") { var d1 = Date.parse($(''#'' + controlName).val().toString().replace(/([0-9]+)//([0-9]+)/,''$2/$1'')); if (d1 == null) { alert(''Date Invalid.''); $(''#'' + controlName).val(""); } var array = d1.toString(''dd-MMM-yyyy''); $(''#'' + controlName).val(array); } }

El RegExp reemplaza .replace(/([0-9]+)//([0-9]+)/,''$2/$1'') cambio día / mes posición.



Date.parse reconoce solo formatos específicos, y no tiene la opción de decirle cuál es su formato de entrada. En este caso, cree que la entrada está en el formato mm/dd/yyyy , por lo que el resultado es incorrecto.

Para solucionar esto, necesita analizar la entrada usted mismo (por ejemplo, con String.split ) y luego construir manualmente un objeto Date , o usar una biblioteca más completa como DateJS .

Ejemplo para el análisis manual

var input = $(''#'' + controlName).val(); var parts = str.split("/"); var d1 = new Date(Number(parts[2]), Number(parts[1]) - 1, Number(parts[0]));

Ejemplo usando date.js:

var input = $(''#'' + controlName).val(); var d1 = Date.parseExact(input, "d/M/yyyy");


Actualizar

A continuación has dicho:

Lo sentimos, no puedo predecir el formato de fecha antes, debe ser como dd-mm-aaaa o dd / mm / aaaa o dd-mmm-aaaa formato, finalmente quería convertir todo este formato a formato dd-MMM-aaaa.

Eso cambia completamente la pregunta. Será mucho más complejo si no puedes controlar el formato. No hay nada incorporado en JavaScript que le permita especificar un formato de fecha. Oficialmente, el único formato de fecha soportado por JavaScript es una versión simplificada de ISO-8601 : yyyy-mm-dd , aunque en la práctica casi todos los navegadores también admiten yyyy/mm/dd . Pero aparte de eso, tiene que escribir el código usted mismo o (y esto tiene mucho más sentido) usar una buena biblioteca. Probablemente usaría una biblioteca como http://momentjs.com/ o DateJS (aunque DateJS no se ha mantenido en años).

Respuesta original :

Si el formato es siempre dd/mm/yyyy , entonces esto es trivial:

var parts = str.split("/"); var dt = new Date(parseInt(parts[2], 10), parseInt(parts[1], 10) - 1, parseInt(parts[0], 10));

split divide una cadena en el delimitador dado. Luego usamos parseInt para convertir las cadenas en números, y usamos el new Date constructor de new Date para construir una Date partir de esas partes: la tercera parte será el año, la segunda parte del mes y la primera parte del día. Date utiliza números de mes basados ​​en cero, por lo que tenemos que restar uno del número de mes.