Comunidad de diseño web y desarrollo en internet online

Descomponer fecha

Citar            
MensajeEscrito el 10 May 2007 11:28 am
Hola foreros!
A ver si alguien me echa un consejo:

Tengo un DateField formateado y me da una fecha tipo:
2007-5-10
Necesito especificarle en AS que
2007 (o el año que sea)=año;
5 (o el mes que sea)=mes:
10 (o el día que sea)=dia;

para luego jugar con esas nuevas variables.
Muchas gracias por vuestra ayuda.

Por marxz

24 de clabLevel



 

Madrid

msie7
Citar            
MensajeEscrito el 10 May 2007 01:01 pm
Puedes usar "substr". Supongamos que el DateField tiene como nombre de instancia "mi_calendario":

Código :

trace("año: "+mi_calendario.text.substr(0, 4)) //2007
trace("mes: "+mi_calendario.text.substr(5, 1)) //5
trace("día: "+mi_calendario.text.substr(7, 2)) //10


Como ves es sencillo :-)

Por shogoki

355 de clabLevel

4 tutoriales

 

Venezuela

firefox
Citar            
MensajeEscrito el 10 May 2007 02:08 pm
He aquí un ejemplo de una solución incorrecta. Si el DateField toma la hora y fecha del sistema, simplemente usás el objeto Date para obtener año, mes y día por separado.

Si no me creés (respecto a que esa solución es mala) preguntate qué pasaría si el mes tuviera 2 dígitos (cosa que ocurre 3 veces).

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

msie
Citar            
MensajeEscrito el 10 May 2007 02:08 pm
Yo prefiero usar el objeto date y de ahi tomar los valores por separado, es una opcion, por ejemplo:

Código :

var dia;
var mes;
var año;

fecha= new date
dia=fecha.getday
mes=fecha.getmonth
año=fecha.getyear

Por jsmedia

28 de clabLevel



Genero:Masculino  

Morrison, Cordoba, Argentina

msie
Citar            
MensajeEscrito el 10 May 2007 02:35 pm
Yo uso algo más rústico, pero me funciona

Código :

fecha=new Date()
dia=fecha.getDate()
mes=fecha.getMonth()
ano=fecha.getFullYear()
mes=mes+1
if(mes==1){
   xmes=dia+" de Enero de "+ano
}
if(mes==2){
   xmes=dia+" de Febrero de "+ano
}
if(mes==3){
   xmes=dia+" de Marzo de "+ano
}
if(mes==4){
   xmes=dia+" de Abril de "+ano
}
if(mes==5){
   xmes=dia+" de Mayo de "+ano
}
if(mes==6){
   xmes=dia+" de Junio de "+ano
}   
if(mes==7){
   xmes=dia+" de Julio"+ano
}
if(mes==8){
   xmes=dia+" de Agosto de "+ano
}
if(mes==9){
   xmes=dia+" de Septiembre de "+ano
}
if(mes==10){
   xmes=dia+" de Octubre de "+ano
}
if(mes==11){
   xmes=dia+" de Noviembre de "+ano
}
if(mes==12){
   xmes=dia+" de Diciembre de "+ano
}
espero ayude, Saludos.

Por Ereb

Claber

1352 de clabLevel

1 tutorial

Genero:Masculino  

México, D.F.

firefox
Citar            
MensajeEscrito el 10 May 2007 02:39 pm

HernanRivas escribió:

He aquí un ejemplo de una solución incorrecta. Si el DateField toma la hora y fecha del sistema, simplemente usás el objeto Date para obtener año, mes y día por separado.

Si no me creés (respecto a que esa solución es mala) preguntate qué pasaría si el mes tuviera 2 dígitos (cosa que ocurre 3 veces).


Si bueno pero es fácil usar un dateFormatter para formatear la fecha y que esta sea mostrada por ejemplo como "2007-05-10"

Luego el código funciona perfectamente aunque el mes sea de 2 dígitos

Código :

  trace("año: "+mi_calendario.text.substr(0, 4)) //2007
  trace("mes: "+mi_calendario.text.substr(5, 2)) //05
  trace("día: "+mi_calendario.text.substr(8, 2)) //10


La otra opción como dices es usar Date que sería:

Código :

var date:Date =  mi_calendario.selectedDate
trace(date.getFullYear()) //2007
trace(date.getMonth()+1) //5
trace(date.getDate()) //10

Por shogoki

355 de clabLevel

4 tutoriales

 



Ultima edición por shogoki el 10 May 2007 02:46 pm, editado 2 veces

Venezuela

firefox
Citar            
MensajeEscrito el 10 May 2007 02:43 pm
Ereb: esa no es la mejor manera (es más, posiblemente es la peor de todas), primero, te conviene revisar la documentación sobre el switch y luego descartar el uso del switch y hacer un Array con los meses y obtener así el mes. Es mucho más corto y lo solucionás en 2 o 3 líneas.

Código :

var misMeses:Array = new Array ("enero", "febrero", "marzo", etc..);
var miFecha:Date = new Date ();
var miMes = misMeses[miFecha.getMonth ()];
Porqué recomiendo aprender a usar el switch cuando sigue siendo una solución mala?? Porque para casos con muchos ifs cuando no podés usar un Array se vuelve mucho más comodo. Entonces, aprender a usarlo es importante para otros casos.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 



Ultima edición por HernanRivas el 10 May 2007 07:46 pm, editado 1 vez

Argentina

msie
Citar            
MensajeEscrito el 10 May 2007 03:41 pm
Muchas gracias por todas vuestras sugerencias, sinceramente. He de explicar algún detalle:
El DateField en realidad es un TextField con un mc_popup q contiene un DateChooser.
Al elegir un día lo manda al campo de texto y lo he formateado para que lo haga de acuerdo con el formato fecha de Base de Datos SQL (año-mes-dia), a donde va luego.
Osea que ya no hay que definir meses, ni duración de estos ni nada, gracias Ereb y JSMedia, pero en realidad es algo más sencillo.
Es coger la fecha elegida y partirla en tres trozos por "-" y decirle que el primer trozo se llama anio1, el segundo mes1 y el tercero dia1, para luego pasarlo a milisegundos con una constante y poder comparar dos fechas.

En el botón tengo este código que recoge las fechas:

Código :

on (release, keyPress "<Enter>") {
   // creo los dos objetos Date con los datos introducidos
   var fecha1:Date = new Date(anio1, mes1-1, dia1);
   var fecha2:Date = new Date(anio2, mes2-1, dia2);
   // llamo a la función que compara las fechas
   compararFechas(fecha1, fecha2);
}


Que llama a esta función que las compara y devuelve la diferencia:

Código :

function compararFechas(fecha1:Date, fecha2:Date):Void {
   // utilizamos la constante para dividir los milisegundos
   // y convertirlos en días 1000*60*60*24=86400000
   var constante:Number = 86400000;
   var diferenciaDias:Number = Math.abs((fecha2.getTime()-fecha1.getTime())/constante);
   //vemos cual es la más reciente
   if (fecha1<fecha2) {
      mensaje = "fecha2 mayor que fecha1, diferencia = "+diferenciaDias+" días";
   } else if (fecha1>fecha2) {
      mensaje = "fecha1 mayor que fecha2, diferencia = "+diferenciaDias+" días";
   } else {
      mensaje = "fecha1 igual que fecha2, diferencia = "+diferenciaDias+" días";
   }
}


Sólo necesito mandarle las fechas descompuestas. Va más por el substr de Shogoki, pero como dice Hernan puede dar problemas.
Yo estaba pensando algo parecido, incluso más sencillo, que ya he usado en esta misma aplicación para traer fechas desde xml:
split("-")
Creo que tiene que ir por ahí. Y lo he intentado, pero aunque entiendo bastante el AS, no son tan capaz de escribirlo.

He escrito:

Código :

   var params:Array = queryStrA.split("-", 3);
   trace(params); // año,mes,dia
        // params se establece como un array con tres elementos:
            params[0] == ""; //año startDate_txt
            params[1] == ""; //mes startDate_txt
            params[2] == ""; //dia startDate_txt
         
    var milisout:String = milisout;
   endDate_txt = milisout;
    var params:Array = queryStrB.split("-", 3);
    trace(params); // año,mes,dia
        // params se establece como un array con tres elementos:
            params[0] == ""; //año endDate_txt
            params[1] == ""; //mes endDate_txt
            params[2] == ""; //dia endDate_txt

Pero no sé si va a parte, en el botón o dentro de la función.
Lo he puesto detro de la función.
Y luego el botón recogería:

Código :

on (release) {
   // creo los dos objetos Date con los datos introducidos
   var entrada:Date = new Date(queryStrA[0],queryStrA[1],queryStrA[2]);
   var salida:Date = new Date(queryStrB[0],queryStrB[1],queryStrB[2]);
   // llamo a la función que compara nuestras fechas
   compararFechas(entrada, salida);
}


Pero falla.
Muchas gracias a todos, y perdonad que sea tan largo el post, o si pensáis que ya es demasiado pedir.
Saludos!

Por marxz

24 de clabLevel



 

Madrid

msie7
Citar            
MensajeEscrito el 10 May 2007 07:45 pm
El split se usa así:

Código :

var miFrase:String = "Frase de prueba 1";
var miArray = new Array ();
miArray = miFrase.split (" ");
//
trace (miArray[0]);// output: Frase
trace (miArray[2]);// output: prueba
De todos modos, estoy seguro que hay un modo de obtener año, mes y día con una función más simple.


Shogoki: Formatear la fecha de otro modo para "emparchar" un error de código (o de lógica) no es la solución, cuando tus códigos se vuelven muy complejos, tienden a arrastrar errores.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

msie
Citar            
MensajeEscrito el 11 May 2007 01:10 pm
Bueno, es momento de enviaros muchas graciasa todos por tomaros vuestro tiempo!
Co todas vuestras respuestas he aprendido algo.
Especialmente a Hernan, creo que con ese modelo de split, tardaré más o menos en adaptarlo, pero funcionará. Lo intentaré en breves, que voy a descansar, que el código se me sale por las orejas, y hay que asentar lo aprendido.
Gracias este foro, y a que los experimentados os tomais la molestia, cada vez voy escribiendo algo más de código, ir más allá del mero fusilamiento.

Por marxz

24 de clabLevel



 

Madrid

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.