Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Restarle dias a una fecha (https://www.clubdelphi.com/foros/showthread.php?t=74638)

amerika111 30-06-2011 18:00:29

Restarle dias a una fecha
 
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

Cita:

Empezado por roman (Mensaje 405200)
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:

Código SQL [-]
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

Cita:

Empezado por amerika111 (Mensaje 405201)
o pero esto queria saber si hay alguna manera de hacerlo en firebird

Ejemplo:
Código SQL [-]
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

Cita:

Empezado por Al González (Mensaje 405202)
Además de lo comentado por Román, puedes hacer lo siguiente:


Código SQL [-]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

Cita:

Empezado por amerika111 (Mensaje 405210)
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

Cita:

Empezado por amerika111 (Mensaje 405210)
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:
Código SQL [-]
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

Cita:

Empezado por Casimiro Notevi (Mensaje 405213)
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 [-]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

Cita:

Empezado por guillotmarc (Mensaje 405212)
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

Cita:

Empezado por amerika111 (Mensaje 405455)
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

Cita:

Empezado por guillotmarc (Mensaje 405465)
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


La franja horaria es GMT +2. Ahora son las 18:08:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi