2011-07-13 19 views
5

Tengo esta fecha como cadena conmigo 15-07-2011 que tiene el formato dd-mm-yyyy. Necesitaba crear un objeto Date desde esta cadena. Así que tengo que convertir la fecha en el formato dd-mm-yyyy a mm-dd-yyyy.Manera más limpia de convertir dd-mm-yyyy a formato mm-dd-aaaa en Javascript

Lo que hice fue lo siguiente.

var myDate = '15-07-2011'; 
var chunks = myDate.split('-'); 

var formattedDate = chunks[1]+'-'+chunks[0]+'-'+chunks[2]; 

Ahora tengo la cadena de 07/15/2011, que se encuentra en formato mm-dd-yyyy, y puedo pasarlo al Date() constructor para crear un objeto Date. Deseo saber si hay alguna manera más limpia de hacerlo.

+5

Parece lo suficientemente limpia para mí. – MRAB

+0

¿Quiere decir más corto? – William

+0

@Lime No, me refería a una práctica más limpia y ampliamente aceptada. – Sparky

Respuesta

5

Eso se ve muy limpio como es.

+0

Todas las respuestas fueron muy útiles y seguras.Mi agradecimiento especial a Edgar Bonet por sus útiles comentarios. Hubiera seleccionado su respuesta como aceptada si hubiera respondido (sin ánimo de ofensa para Paul Sonier o cualquier otra persona agradable que respondiera/comento. Todos los que respondieron fueron útiles). Gracias a todos. – Sparky

2

La reorganización de trozos de una cuerda es una forma perfectamente "limpia" y legítima de cambiar el formato de una fecha.

Sin embargo, si no está contento con eso (¿tal vez desea saber que la cadena que está reorganizando es en realidad una fecha válida?), Entonces le recomiendo que consulte DateJS, que es un completo biblioteca de manejo de fechas destacadas para Javascript.

+0

Gracias por el puntero a DateJS. Pero probablemente debería seguir el camino actual ya que mi requisito es solo convertir dd-mm-aaaa en mm-dd-aaaa. No querría la sobrecarga de otra biblioteca por eso. – Sparky

-2

Trate

myDate.format("mm-dd-yyyy"); 
+1

'try' ?? ¿Y cuándo se basó la programación en probar cosas al azar? '# format' solo funcionará si el' Date.prototype' se ha aumentado con dicho método. –

+0

'myDate' ni siquiera es una Fecha: ¡es una Cadena! Entonces este hipotético método 'format()' debe estar en 'String.prototype', lo que tiene aún menos sentido. –

1

depende de lo que quiere decir con limpiador

var myDate = '15-07-2011'; 
var chunks = myDate.split('-'); 
var formattedDate = [chunks[1],chunks[0],chunks[2]].join("-"); 

Algunos dirían que esto es más limpio, pero lo hace esencialmente la misma.

1
var formattedDate = chunks[1] + '-' + chunks[0] + '-' + chunks.pop(); 
+0

Parece que agregó tres caracteres y una función inútil me llamó. – cbrandolino

+0

Gracias .., pero ¿por qué usarías pop() cuando conoces exactamente el índice de matriz y no va a cambiar? – Sparky

+0

Si no conoce el índice de matriz y ya no necesita fragmentos, creo que pop es más rápido para referirse al último elemento de la matriz. Si su código es de misión crítica, por supuesto, no necesita una llamada de función inútil como dijo @cbrandolino. –

1

Si lo desea, podría reducir algunas variables.

var date = '15-07-2011'.split('-'); 
date = date[1]+'-'+date[0]+'-'+date[2]; 

Si quieres un chiste

var date = '15-07-2011'.replace(/(\d*)-(\d*)-(\d*)/,'$2-$1-$3') 
+0

Gracias Lima. Aunque Regex no es lo mío :) – Sparky

+1

Sí, son bastante feos^_^ – William

1
var c = '01-01-2011'.split('-'); 
var d = new Date(c[2],c[1]-1,c[0]); 
+1

+1, ya que esto no depende de los formatos de texto particulares que 'nueva Fecha()' pueda aceptar. –

+0

¿Por qué está escrito como c [1] -1? – Sparky

+1

@Sparky: Porque los objetos Date cuentan meses comenzando en 0 = Jan. –

0

voy a añadir mi opinión de que la solución es perfectamente válido, pero si quieres algo diferente:

var myDate = '15-07-2011'; 
myDate.split('-').reverse().join('-'); 

Te dará '2011-07-15' que, aunque no es exactamente lo que pediste, se analizará correctamente al Date

0

escribí una biblioteca para analizar, manipular y dar formato a cadenas con nombre Moment.js

var date = moment('15-07-2011', 'DD-MM-YYYY').format('DD-MM-YYYY'); 
Cuestiones relacionadas