2010-11-13 19 views

Respuesta

8

Simplemente puede analizar la cadena:

var year = parseInt(dateString); 

El análisis se termina en el tablero, como que no puede ser parte de un entero (excepto como primer carácter).

+2

+1, el más simple es el mejor, usar el objeto 'Fecha' es simplemente una exageración, y debe evitarse ya que el formato ISO-8601 no es ampliamente compatible -pero, 'parseInt' funcionará sin problemas. Tal vez usaría también 'dateString.slice (0,4);' – CMS

+0

, esta es una mala abstracción y ad hoc. – episodeyang

0

Usted puede simplemente utilizar -

var dateString = "2010-02-02T08:00:00Z"; 
var year = dateString.substr(0,4); 

si el año permanecen siempre en las posiciones delanteras de la cadena de año.

+2

Tenga en cuenta que 'String.prototype.slice' generalmente se prefiere a' substr', ya que tiene varios errores en las implementaciones, por ejemplo, en JScript (IE <= 8), no puede manejar índices negativos. Ambos son parte del estándar ECMAScript, pero 'substr' es * no normativo *, lo que significa que una implementación conforme a los estándares no es estrictamente necesaria para implementar' substr'. – CMS

+0

@CMS: Wow, no sabía eso, ya me preguntaba por qué preferías 'slice' a' substr'; todos los días ... –

1
var year = '2010-02-02T08:00:00Z'.substr(0,4) 

...

var year = new Date('2010-02-02T08:00:00Z').getFullYear() 
7

Es una fecha, el uso de Javascript construido en Date funciones ...

var d = new Date('2011-02-02T08:00:00Z'); 
alert(d.getFullYear()); 
+1

Ver mi [comentario a @Rob] (http://stackoverflow.com/questions/4170117/how-to-parse-the-year-fthe-date-string-in-javascript#comment-4503426) ... Sugerencia: [Pruébelo] (http://jsbin.com/aruge4/edit) en IE8 o inferior, e incluso en versiones anteriores de Firefox, simplemente no funcionará ... – CMS

+1

¡Ah, gracias! No me di cuenta de esto. Dicho esto, al tratar con las fechas he encontrado que siempre es una buena idea usar las funciones de fecha en lugar de usar splits/substr. Esta es una excepción y gracias por el aviso. –

5

yo diría que la forma correcta es

var year = (new Date('2010-02-02T08:00:00Z')).getFullYear(); 

o

var date = new Date('2010-02-02T08:00:00Z'); 
var year = date.getFullYear(); 

, ya que le permite hacer otras manipulaciones de fecha más tarde si es necesario y también continuará trabajando si el formato de fecha cambia alguna vez.

ACTUALIZADO: Jason Benson señaló que Date lo analizará por usted. Así que eliminé las llamadas de Date.parse.

+2

la forma "correcta" IMHO en este caso es simplemente una exageración, porque el formato manejado por el constructor 'Date' y el método' Date.parse' en ECMAScript 3, ** dependen de la implementación **, el formato ISO-8601 fue presentado recientemente por ECMAScript 5, lo que significa que encontrará implementaciones que no pueden analizar ese formato. Él solo quiere los primeros 4 charaacters, simplemente iría por 'dateStr.slice (0,4)' ... – CMS

+1

@CMS, al menos, la gente debería saber que hay una forma oficial, incluso si resulta que no funciona en IE, o donde sea.Analizar las fechas usando slice (o substr o split) es tan malo como usar una expresión regular para analizar xml, incluso si no tiene un analizador xml decente disponible. –

+1

No estoy de acuerdo: no hay una forma "oficial" de obtener el año de una cadena formateada de esta manera, una subcadena será suficiente. El único caso en que un objeto 'Fecha' podría ser útil es cuando usted vive en otra zona horaria que GMT, ya que el número del año actual difiere alrededor de la víspera del Año Nuevo. –

Cuestiones relacionadas