PDA

Ver la Versión Completa : Restarle dias a una fecha


amerika111
30-06-2011, 18:00:29
hola, me pregunto si hay una funcion o una forma de que a una fecha determinada se le puedan restar una cantidad de dias.

ejemplo:

2011-06-30 menos 7 dias 2011-06-23

roman
30-06-2011, 18:12:38
No sé qué versión de Delphi uses, pero en la versión 7 tienes la unidad DateUtils con muchas rutinas para manejo de fechas, entre ellas, la función IncDay que hace lo que quieres (pasándolo un número negativo de días para restar en lugar de sumar).

// Saludos

amerika111
30-06-2011, 18:14:45
No sé qué versión de Delphi uses, pero en la versión 7 tienes la unidad DateUtils con muchas rutinas para manejo de fechas, entre ellas, la función IncDays que hace lo que quieres (pasándolo un número negativo de días para restar en lugar de sumar).

// Saludos


o pero esto queria saber si hay alguna manera de hacerlo en firebird

Al González
30-06-2011, 18:15:28
Además de lo comentado por Román, puedes hacer lo siguiente:

ValorFecha - 7

Saludos.

Al González. :)

roman
30-06-2011, 18:20:15
Ja, ja, sí, mucho más sencillo :). Estaba por recontestar eso pero te me adelantaste :) Cabe nada más mencionar que eso es así por la forma en que Delphi guarda las fechas/horas: en un valor real donde la parte entera son los días pasados desde una fecha fija y la parte fraccionaria los segundos transcurridos desde la media noche.

// Saludos

ecfisa
30-06-2011, 18:22:04
o pero esto queria saber si hay alguna manera de hacerlo en firebird
Ejemplo:

SELECT EXTRACT(DAY FROM CURRENT_TIMESTAMP - 5) FROM RDB$DATABASE

Resta cinco días a la fecha actual.

Saludos.

roman
30-06-2011, 18:33:10
¡Oh! :o ¡Vaya confusión! Debí fijarme que era el foro de Firebird. Lo siento :(

// Saludos

amerika111
30-06-2011, 18:36:33
Además de lo comentado por Román, puedes hacer lo siguiente:


Código SQL [-] (http://www.clubdelphi.com/foros/#)ValorFecha - 7



Saludos.

Al González. :)

lo que pasa que la fecha a la que le quiero restar no es una variable esta dentro de un between

BETWEEN '2011-06-19' AND ('2011-06-19' - 7)

guillotmarc
30-06-2011, 18:54:59
lo que pasa que la fecha a la que le quiero restar no es una variable esta dentro de un between

BETWEEN '2011-06-19' AND ('2011-06-19' - 7)

No hay problema. Haces un CAST para forzar el tipo y ya puedes restar directamente :

BETWEEN '2011-06-19' AND (cast('2011-06-19' as timestamp) - 7)

Saludos.

Casimiro Notevi
30-06-2011, 18:55:18
lo que pasa que la fecha a la que le quiero restar no es una variable esta dentro de un between

BETWEEN '2011-06-19' AND ('2011-06-19' - 7)

Y entonces por qué le pasas como parámetro 2011-06-19?, pásale 2011-06-12 y listo.

También puedes poner algo así como:
between cast('19.06.2011' as date)-7 and '19.06.2011'

Recuerda que será desde menor hasta mayor, no al revés.

amerika111
30-06-2011, 19:51:23
Y entonces por qué le pasas como parámetro 2011-06-19?, pásale 2011-06-12 y listo.

También puedes poner algo así como:

Código SQL [-] (http://www.clubdelphi.com/foros/#)between cast('19.06.2011' as date)-7 and '19.06.2011'



Recuerda que será desde menor hasta mayor, no al revés.


Si con las dos opciones se esta en lo correcto y funcional, de menor a mayor ok

amerika111
04-07-2011, 17:22:55
No hay problema. Haces un CAST para forzar el tipo y ya puedes restar directamente :

BETWEEN '2011-06-19' AND (cast('2011-06-19' as timestamp) - 7)

Saludos.

se me ha presentado un caso, si fuera el caso restar dos pero seria en el rango de un horario de trabajo vespertino, tengo dos campos timestamp lo unico que inserto es la hora y lo que se inserta es

hora entrada 1899-12-30 08:00:00 p.m.
hora salida 1899-12-30 05:00:00 a.m.

y tendria que obtener las horas que hay entre esas horas, y como lo unico que inserto es la hora y no la fecha del dia. entonces se me ocurrio si hay una manera de detectar si una hora es am o pm

guillotmarc
04-07-2011, 18:31:32
se me ha presentado un caso, si fuera el caso restar dos pero seria en el rango de un horario de trabajo vespertino, tengo dos campos timestamp lo unico que inserto es la hora y lo que se inserta es

hora entrada 1899-12-30 08:00:00 p.m.
hora salida 1899-12-30 05:00:00 a.m.

y tendria que obtener las horas que hay entre esas horas, y como lo unico que inserto es la hora y no la fecha del dia. entonces se me ocurrio si hay una manera de detectar si una hora es am o pm

Lo siento, no te he acabado de entender.

Pero si quieres detectar si una hora es AM o PM, piensa que el valor decimal representa la fracción del día.

Por tanto si es <= 0.5 es AM y si está entre 0.5 y 1 es PM.

Saludos.

amerika111
04-07-2011, 23:38:48
Lo siento, no te he acabado de entender.

Pero si quieres detectar si una hora es AM o PM, piensa que el valor decimal representa la fracción del día.

Por tanto si es <= 0.5 es AM y si está entre 0.5 y 1 es PM.

Saludos.


hora entrada 1899-12-30 08:00:00 p.m.
hora salida 1899-12-30 05:00:00 a.m.


ok, y de una fecha como las de arriba como sacaria el valor decimal que me comentas..

guillotmarc
05-07-2011, 12:08:05
Hola.

Dado que tienen el día 0, directamente el valor del campo ya debería ser solo un decimal con solo la parte de hora.

Si no estoy equivocado ya deberías poder comparar directamente si el campo es < 0.5 para saber si es AM o PM.

Saludos