| Autor |
Mensaje |
Miembro
Ocasional
|
#1 Publicado: 20 Sep 2006 06:41 desde Peru  [Editar]
de que forma puedo hacer la resta de dos fechas, de tal forma que el resultado se muestre en años, meses y días. Gracias.
Si este mensaje te ha servido de ayuda dale tu voto
, si quieres penalizarlo
Campex
winxp
|
Administrador

|
#2 Publicado: 20 Sep 2006 07:51 desde Cantabria  [Editar]
Directamente restando los campos donde tienes las fechas y dándole el formato que desees.
Si este mensaje te ha servido de ayuda dale tu voto
, si quieres penalizarlo
Todo lo que sueñas, se puede diseñar.
FM 11 * VV 6 * PHP 4 * MySQL * Win XP/Vista.
|
Miembro
Ocasional
|
#3 Publicado: 25 Sep 2006 17:42 desde Peru  [Editar]
te pongo un ejemplo, al restar las fechas 01/01/1991 - 01/01/1990, la respuesta es 0 años, 11 meses y 31 días, cuando lo correcto debería ser 1 año, 0 meses y 0 días.
mi bd tiene dos campos de fechas (fecha1, fecha2) y tres campos calculation con las siguientes formulas:
años: Year(fec fin - fec ini) -1
meses: Month(fec fin - fec ini) - 1
días: Day(fec fin - fec ini)
Espero respuesta. Gracias.
Si este mensaje te ha servido de ayuda dale tu voto
, si quieres penalizarlo
Campex
winxp
|
Administrador

|
#4 Publicado: 25 Sep 2006 17:48 desde Cantabria  [Editar]
Contestado por Perezoso en el tópico "Resta de Fechas y resultado en días", que aparece a pie de página en "Tópicos relacionados con resta de fechas"
Crea 2 campos con formato de FECHA: Fecha1 y Fecha2 Crea un campo de calculo NUMERICO para el resultado: Dias. La "formula" para introducir en ese campo de calculo sera esta: Fecha1 - Fecha2 (o: Fecha2 - Fecha1) Te saldra un resultado positivo o negativo en funcion de cual de las 2 fechas es mayor ... si deseas que nunca aparezca el signo menos, modifica la formula de esta manera: Abs(Fecha1 - Fecha2). Saludos.
Un saludo
Si este mensaje te ha servido de ayuda dale tu voto
, si quieres penalizarlo
Todo lo que sueñas, se puede diseñar.
FM 11 * VV 6 * PHP 4 * MySQL * Win XP/Vista.
|
Moderador

|
#5 Publicado: 25 Sep 2006 18:02 - Editado por: Perezoso desde Spain  [Editar]
2 formulas, recopiladas hace algun tiempo, de mis andaduras por la red (creo recordar que estan bajadas de FMClub y/o Macuarium) ... prueba y experimenta:
*************************
If(Month(Fecha Nacimiento) = Month(Get(CurrentDate)); If(Day(Fecha Nacimiento) = Day(Get(CurrentDate)); Year(Get(CurrentDate)) - Year(Fecha Nacimiento); Year(Get(CurrentDate)) - Year(Fecha Nacimiento) - 1); If(Month(Fecha Nacimiento) > Month(Get(CurrentDate)); Year(Get(CurrentDate)) - Year(Fecha Nacimiento) - 1; Year(Get(CurrentDate)) - Year(Fecha Nacimiento)))
& " a- " &
If(Day(Fecha Nacimiento) = Day(Get(CurrentDate));
Mod((Month(Get(CurrentDate)) - Month(Fecha Nacimiento) + 12); 12);
Mod((Month(Get(CurrentDate)) - Month(Fecha Nacimiento) + 11); 12))
& " m- " &
If(Day(Get(CurrentDate)) = Day(Fecha Nacimiento); (Day(Get(CurrentDate)) - Day(Fecha Nacimiento)); (Day(Get(CurrentDate)) - Day(Fecha Nacimiento)) + 30)
& "d"
*************************
NumToText(Year(Today) - Year(Fecha Nacimiento) - Case(Today<
Date(Month(Fecha Nacimiento); Day(Fecha Nacimiento); Year(Today)); 1; 0)) &
" años, " &
NumToText(Mod(Month(Today) - Month(Fecha Nacimiento) + 12 - Case(Day(Today)
< Day(Fecha Nacimiento); 1; 0); 12)) & " meses, " &
NumToText(Day(Today) - Day(Fecha Nacimiento) + Case(Day(Today) >= Day(Fecha
Nacimiento); 0; Day(Today- Day(Today)) < Day(Fecha Nacimiento); Day(Fecha
Nacimiento); Day(Today- Day(Today)))) & " días"
*************************
Si este mensaje te ha servido de ayuda dale tu voto
, si quieres penalizarlo
Soy todo oidos ;-)
Ubuntu & Win XP # FileMaker: 5 - 10
|
Moderador

|
#6 Publicado: 25 Sep 2006 18:23 desde Spain  [Editar]
He probado las formulas con FM 6 (hay que cambiar en la 1ª formula: Get(CurrentDate) por Status(CurrentDate)) y el resultado ha sido el siguiente:
Fecha Nacimiento: 09-03-1997
Resultado formula 1ª (la azul): 9 a- 5 m- 46d
Resultado formula 2ª (la roja): 9 años, 6 meses, 16 días
Parece claro cual funciona bien y cual funciona peor,¿no?
Si este mensaje te ha servido de ayuda dale tu voto
, si quieres penalizarlo
Soy todo oidos ;-)
Ubuntu & Win XP # FileMaker: 5 - 10
|
Moderador

|
#7 Publicado: 25 Sep 2006 18:39 - Editado por: Perezoso desde Spain  [Editar]
Resumiendo ... que me quedo con la roja (la 2ª).
Para FM 5/6:
NumToText(Year(Today) - Year(Fecha Nacimiento) - Case(Today<
Date(Month(Fecha Nacimiento); Day(Fecha Nacimiento); Year(Today)); 1; 0)) &
" años, " &
NumToText(Mod(Month(Today) - Month(Fecha Nacimiento) + 12 - Case(Day(Today)
< Day(Fecha Nacimiento); 1; 0); 12)) &
" meses, " &
NumToText(Day(Today) - Day(Fecha Nacimiento) + Case(Day(Today) >= Day(Fecha
Nacimiento); 0; Day(Today- Day(Today)) < Day(Fecha Nacimiento); Day(Fecha
Nacimiento); Day(Today- Day(Today)))) &
" días"
Para FM 7/8:
GetAsText(Year(Get ( CurrentDate )) - Year(Fecha Nacimiento) - Case(Get ( CurrentDate )<
Date(Month(Fecha Nacimiento); Day(Fecha Nacimiento); Year(Get ( CurrentDate ))); 1; 0)) &
" años, " &
GetAsText(Mod(Month(Get ( CurrentDate )) - Month(Fecha Nacimiento) + 12 - Case(Day(Get ( CurrentDate ))
< Day(Fecha Nacimiento); 1; 0); 12)) &
" meses, " &
GetAsText(Day(Get ( CurrentDate )) - Day(Fecha Nacimiento) + Case(Day(Get ( CurrentDate )) >= Day(Fecha Nacimiento); 0; Day(Get ( CurrentDate )- Day(Get ( CurrentDate ))) < Day(Fecha Nacimiento); Day(Fecha Nacimiento); Day(Get ( CurrentDate )- Day(Get ( CurrentDate ))))) &
" días"
Esta formula trabaja con una fecha introducida (Fecha Nacimiento) y otra automática que es la fecha actual. La fecha actual se puede cambiar para poder comparar 2 fechas de 2 campos, solo hay que poner el nombre del campo (p.e. "Fecha2") en lugar de Today o de Get ( CurrentDate ).
Si este mensaje te ha servido de ayuda dale tu voto
, si quieres penalizarlo
Soy todo oidos ;-)
Ubuntu & Win XP # FileMaker: 5 - 10
|
Moderador

|
#8 Publicado: 25 Sep 2006 20:34 desde Spain  [Editar]
Bonita esta otra formula. En este caso solo para FM8 y superiores.
Para comparar una fecha con la fecha actual:
Let ( [
neg = Case ( Fecha Nacimiento > Get(CurrentDate) ; -1 ; 1 ) ;
d1 = Case ( neg < 0 ; Get(CurrentDate) ; Fecha Nacimiento ) ;
d2 = Case ( neg < 0 ; Fecha Nacimiento ; Get(CurrentDate) ) ;
d = Mod ( Day ( d2 ) - Day ( d1 ) ; Day (Date ( Month ( d1 ) + 1 ; 0; Year ( d1 ) ) ) ) ;
m = Mod ( Month ( d2 ) - Month ( d1 ) - ( Day ( d2 ) < Day ( d1 ) ) ; 12 ) ;
a = Year ( d2 ) - Year ( d1 ) - ( Month ( d2 ) < Month ( d1 ) )
];
a * neg & " años. " &
m * neg & " meses. " &
d * neg & " dias."
)
Para comparar 2 fechas de 2 campos:
Let ( [
neg = Case ( Fecha1 > Fecha2 ; -1 ; 1 ) ;
d1 = Case ( neg < 0 ; Fecha2 ; Fecha1 ) ;
d2 = Case ( neg < 0 ; Fecha1 ; Fecha2 ) ;
d = Mod ( Day ( d2 ) - Day ( d1 ) ; Day (Date ( Month ( d1 ) + 1 ; 0; Year ( d1 ) ) ) ) ;
m = Mod ( Month ( d2 ) - Month ( d1 ) - ( Day ( d2 ) < Day ( d1 ) ) ; 12 ) ;
a = Year ( d2 ) - Year ( d1 ) - ( Month ( d2 ) < Month ( d1 ) )
];
a * neg & " años. " &
m * neg & " meses. " &
d * neg & " dias."
)
Si este mensaje te ha servido de ayuda dale tu voto
, si quieres penalizarlo
Soy todo oidos ;-)
Ubuntu & Win XP # FileMaker: 5 - 10
|
Moderador

|
#9 Publicado: 25 Sep 2006 20:53 - Editado por: Perezoso desde Spain  [Editar]
Esta variante que he hecho de la formula anterior, creo que tb deberia funcionar correctamente:
Para FM 5/6:
Year( Status(CurrentDate) ) - Year( Fecha Nacimiento ) - ( Month( Status(CurrentDate) ) < Month( Fecha Nacimiento ) ) & " años. " &
Mod( Month( Status(CurrentDate) ) - Month( Fecha Nacimiento ) - ( Day( Status(CurrentDate) ) < Day( Fecha Nacimiento ) ) ; 12 ) & " meses. " &
Mod( Day( Status(CurrentDate) ) - Day( Fecha Nacimiento ) ; Day( Date( Month( Fecha Nacimiento ) + 1 ; 0; Year( Fecha Nacimiento ) ) ) ) & " dias."
Para FM 7/8
Year ( Get(CurrentDate) ) - Year ( Fecha Nacimiento ) - ( Month ( Get(CurrentDate) ) < Month ( Fecha Nacimiento ) ) & " años. " &
Mod ( Month ( Get(CurrentDate) ) - Month ( Fecha Nacimiento ) - ( Day ( Get(CurrentDate) ) < Day ( Fecha Nacimiento ) ) ; 12 ) & " meses. " &
Mod ( Day ( Get(CurrentDate) ) - Day ( Fecha Nacimiento ) ; Day ( Date ( Month ( Fecha Nacimiento ) + 1 ; 0; Year ( Fecha Nacimiento ) ) ) ) & " dias."
Si este mensaje te ha servido de ayuda dale tu voto
, si quieres penalizarlo
Soy todo oidos ;-)
Ubuntu & Win XP # FileMaker: 5 - 10
|
Miembro
 Constante
  
|
#10 Publicado: 26 Sep 2006 17:53 desde Spain  [Editar]
...desde luego...quien no reste fechas es por que no quiere...
Ya que el cumple años es anual, puedes tb omitir el año de la fecha comparando sólo el día y mes...si lo que pretendes es conseguír un aviso de dicho acontecimiento...
Aunque más completo que lo ya expuesto difícil de ver es.
Si este mensaje te ha servido de ayuda dale tu voto
, si quieres penalizarlo
:-)
|
Miembro
Ocasional
|
#11 Publicado: 3 Feb 2010 03:28 desde Chile  [Editar]
Disuclpen la pregunta reiterativa, pero en mi caso la resta de las fechas no me ningun resultado.
Explico mi situacion
Dos bases de datos en la misma tabla A y B. En la tabla A tengo un campo de formato fecha ( Fecha de entrega ), en la tabla B esta el campo con formato de fecha ( Fecha de Venta ).
Hecha ya la relacion entre ambas BD, necesito resta de Fecha de Venta - Fecha de entrega y que el rsultado lo deposite en un tercer campo en la base A llamado dias de retrazo.
NOTA: he hecho el calculo directo y no me da ningun resultado. Estoy trabajando con FM 10.
Si me pueden dar una ayuda se los agradesco de antemano.
Si este mensaje te ha servido de ayuda dale tu voto
, si quieres penalizarlo
|
Administrador

|
#12 Publicado: 3 Feb 2010 08:14 desde Cantabria  [Editar]
Para que la resta funcione la relación tendría que ser de uno a uno, es decir de un registro en A a un registro en B. Si es de uno a muchos... ¿De cual restas?
Si este mensaje te ha servido de ayuda dale tu voto
, si quieres penalizarlo
Todo lo que sueñas, se puede diseñar.
FM 11 * VV 6 * PHP 4 * MySQL * Win XP/Vista.
|
Miembro
Ocasional
|
#13 Publicado: 3 Feb 2010 18:34 desde Cantabria  [Editar]
La resta se hace del campo fecha de venta - fecha de entrega , que me debiera dar un numero determinado de dias , no mayor a 31
Si este mensaje te ha servido de ayuda dale tu voto
, si quieres penalizarlo
|
Miembro
Ocasional
|
#14 Publicado: 3 Feb 2010 18:36 desde Cantabria  [Editar]
Lo de la relacion 1 a 1 no me quedo claro .
Gracias de antemano
Si este mensaje te ha servido de ayuda dale tu voto
, si quieres penalizarlo
|
Administrador

|
#15 Publicado: 3 Feb 2010 18:40 desde Spain  [Editar]
Un registro de la tabla A con un registro de la tabla B, no uno de la tabla A con muchos del la tabla B.
Si este mensaje te ha servido de ayuda dale tu voto
, si quieres penalizarlo
Todo lo que sueñas, se puede diseñar.
FM 11 * VV 6 * PHP 4 * MySQL * Win XP/Vista.
|