2011-06-21 19 views
11

He heredado un proyecto para una empresa para la que estoy trabajando. Sus fechas se registran en el siguiente formato:¿Agregar un día a la fecha de Javascript + formato único?

El 18 de marzo de 2011 aparecería como "18 de marzo de 2011".

31 de abril de 2010 aparecería como "31 de abril de 2010".

¿Cómo usaría Javascript para agregar un día a una fecha formateada de la manera anterior, y luego volver a convertirla en el mismo formato?

Quiero crear una función que agrega un día a "18 de marzo de 2011" y devuelve "19 de marzo de 2011". O agrega 1 día a "30 de junio de 2011" y devuelve "1 de julio de 2011".

¿Alguien puede ayudarme?

Respuesta

22

En primer lugar no hay 31o de abril;)

Para el problema real, el objeto de fecha puede entender el formato actual cuando se pasa como argumento ..

var dateString = '30 Apr 2010'; // date string 
var actualDate = new Date(dateString); // convert to actual date 
var newDate = new Date(actualDate.getFullYear(), actualDate.getMonth(), actualDate.getDate()+1); // create new increased date 

// now extract the bits we want to crete the text version of the new date.. 
var newDateString = ('0'+newDate.getDate()).substr(-2) + ' ' + newDate.toDateString().substr(4,3) + ' ' + newDate.getFullYear(); 

alert(newDateString); 

demo en http://jsfiddle.net/gaby/jGwYY/1/


el mismo extracción usando (la mejor apoyado) slice en lugar de substr

// now extract the bits we want to crete the text version of the new date.. 
var newDateString = ('0'+newDate.getDate()).slice(-2) + ' ' + newDate.toDateString().slice(4,7) + ' ' + newDate.getFullYear(); 

demo en http://jsfiddle.net/jGwYY/259/

+0

perfecto gracias! Lo agradezco, tengo que sentirme mucho más cómodo con la Fecha APi, supongo. – Walker

+1

Algo para mencionar es que los meses están indexados por 0. Por lo tanto, 'Apr' corresponde a' 3'. – Jeroen

+0

+1 para "no hay 31 de abril;)" :) –

1

Desea convertir la cadena de fecha en un objeto de fecha, agregar un día al objeto y luego convertir de nuevo. Por favor, eche un vistazo a los documentos API para Date como punto de partida.

0

La mayoría (todos?) Los navegadores serán capaces de analizar esa cadena de fecha con un simple

var parsedDate = new Date(dateString); 

Una vez que tenga un objeto Date se puede añadir un día y salida de una cadena de fecha formateada usando algo como underscore.date .

Si descubre que algunos navegadores no pueden analizar ese formato de fecha, puede escribir una expresión regular bastante simple que separará la cadena de fecha en sus partes constituyentes, y luego crear una instancia de fecha a mano.

También recomiendo encarecidamente realizar el análisis en una función separada, y tratar de mantener las fechas en una representación de fecha tanto como sea posible. Analice la cadena en una fecha tan pronto como sea posible y vuelva a formatearla en una cadena lo más tarde que pueda.

Cuestiones relacionadas