2010-12-01 19 views
15

Este es mi código:JavaScript new Date() y Date.parse()

var exampleDate='23-12-2010 23:12:00'; 
    var date=new Date(exampleDate);//returns invalid Date 
    var date1=Date.parse(exampleDate);//returns NAN 

Quiero convertir cadena anterior en fecha. Así que he escrito un código como lo has visto arriba.

Este código está funcionando muy bien en IE y Opera, pero date variables me está volviendo una fecha no válida y date1 está volviendo NAN en mozilla Firefox, ¿qué debería hacer?

Respuesta

6

El formato anterior solo se admite en IE y Chrome.

así que intente con otros formatos. Los siguientes son algunos formatos y hay navegadores compatibles.

<script type="text/javascript"> 

//var dateString = "03/20/2008"; // mm/dd/yyyy [IE, FF] 

var dateString = "2008/03/20"; // yyyy/mm/dd [IE, FF] 
// var dateString = "03-20-2008"; // mm-dd-yyyy [IE, Chrome] 
// var dateString = "March 20, 2008"; // mmmm dd, yyyy [IE, FF] 
// var dateString = "Mar 20, 2008"; // mmm dd, yyyy [IE, FF] 

// Initalize the Date object by passing the date string variable 
var myDate = new Date(dateString); 
alert(myDate); 
</script> 
+0

aaaa/MM/dd funciona también en Chrome ... ¡Gracias por la solución! – OverMars

+2

esta no debería ser la respuesta aceptada, ver la respuesta de casablancas – Toskan

2

JavaScript debe apoyar la conversión de al menos una de las siguientes dateStrings:

* yyyy/MM/dd 
* MM/dd/yyyy 
* MMMM dd, yyyy 
* MMM dd, yyyy 

intento con:

var exampleDate='12/23/2010 23:12:00'; 
    var date = new Date(exampleDate); 
25

La cadena en su ejemplo no se encuentra en cualquiera de los formatos estándar reconocidos por los navegadores. La especificación ECMAScript requiere navegadores para ser capaz de analizar sólo un formato estándar:

El formato es el siguiente: YYYY-MM-DDTHH:mm:ss.sssZ

Este formato incluye la fecha sólo formas:

YYYY

YYYY-MM

YYYY-MM-DD

También incluye formas de tiempo solamente con una zona de tiempo opcional desfase adjuntas:

THH:mm

THH:mm:ss

THH:mm:ss.sss

También se incluyen son “fecha-tiempos” que pueden ser cualquier combinación de lo anterior.

Si la Cadena no se ajusta a ese formato, la función puede recurrir a cualquier heurística específica de la implementación o formatos de fecha específicos de la implementación. Cadenas o fechas irreconocibles que contienen valores de elementos ilegales en el formato String hará que Date.parse devuelva NaN.

Por lo tanto, en su ejemplo, el uso de 2010-12-23T23:12:00 es la única cadena garantizada para funcionar. En la práctica, la mayoría de los navegadores también permiten fechas del formato DD Month YYYY o Month DD, YYYY, por lo que cadenas como 23 Dec 2010 y Dec 23, 2010 también podrían funcionar.

+0

gracias es ayudarme a reslove mi problema – Chitresh

+0

En el momento en que esta respuesta fue escrito, el análisis de las cadenas de fecha era dependiente de la implementación, por lo tanto, hubo ** ** sin condiciones que están "garantizados para funcionar". Desde entonces, las cadenas de formato largo ISO 8601 sin zona horaria fueron procesadas como UTC por navegadores compatibles con ES5 (como Firefox) y locales por navegadores compatibles con ECMA 2015 (como Chrome y Safari). Los 3 comportamientos se pueden ver en navegadores en uso actual (2015) como IE8 que devuelve NaN, Firefox 40 lo trata como UTC y Chrome 44 como local. Por lo tanto, todavía hay ** cadenas ** que "garantizan que funciona". – RobG

4

Se podría analizar de forma manual con una expresión regular entonces llamar al constructor de la fecha con los elementos de fecha, como por ejemplo:

var parseDate = function(s) { 
    var re = /^(\d\d)-(\d\d)-(\d{4}) (\d\d):(\d\d):(\d\d)$/; 
    var m = re.exec(s); 
    return m ? new Date(m[3], m[2]-1, m[1], m[4], m[5], m[6]) : null; 
}; 
var dateStr = '23-12-2010 23:12:00'; 
parseDate(dateStr).toString(); //=> Thu Dec 23 2010 23:12:00 GMT-0800 
1

Uso datejs y este código:

var exampleDate='23-12-2010 23:12:00'; 
var myDate = Date.parseExact(exampleDate, 'dd-MM-yyyy hh:mm:ss'); 

myDate debe ser un objeto Date correctamente construido.

0

sólo tiene que utilizar en este formato:

var exampleDate='2010-12-23 23:12:00'; 
Cuestiones relacionadas