PDA

Ver la Versión Completa : No encuentro la forma de restar fechas


pablopessoa
03-03-2009, 15:20:50
Hola a todos!!
El problema en si no es restar la fecha... es que no encuentro una funcion que se comporte como necesito..
Es para un sistema de licencias para mi aplicacion, yo necesito restar la fecha de limite de uso que tiene la aplicacion con la fecha actual para saber si esta usandolo dentro de los dias "permitidos" por la licencia.
Yo actualmente uso la funcion DaysBetween(fechaLimite,fechaActual) , pero esta funcion siempre retorna un entero y eso no me sirve. Osea , con un ejemplo:

DaysBetween(30/01/2009,01/01/2009) = 30
DaysBetween(01/01/2009,30/01/2009) = 30

el en primer caso esta bien que devuelva 30, pero en el segundo necesito que me retorne -30, asi de ese modo se que se paso de la fecha de la licencia.
Espero haberme explicado bien, sino me dicen y trato de explicar mejor
Si alguien me puede recomendar una forma de hacerlo se los agradeceria mucho
Saludos!!!

Caro
03-03-2009, 15:51:04
Hola pablopessoa, despues de obtener el numero de días con DaysBetween, comparas tus fechas, podría ser con la función CompareDate, si la fecha limite es menor a la fecha actual, al resultado del DayBetween lo conviertes en negativo multiplicando por -1.

Saluditos

pablopessoa
03-03-2009, 15:56:18
Hola caro , gracias por responder.
No es necesario tener el numero en negativo.. solo busco una forma de saber si la fecha actual es menor , igual o mayor a la del limite de la licencia.
Lo que pasa es que antes restaba las fechas, pero tenia errores eso, por que , por ejemplo, si estaba en el dia 1/12/2008 y hacia algo como (15/1/2009 - 01/12/2008) me daba el resultado en negativo, cuando no deberia si 15/01/2009 es mayor, me explico?
Pero me llamo la atencion lo de la funcion CompareDate, me podras explicar un poquito como se usa o que retorna?
Muchas Gracias!!

ContraVeneno
03-03-2009, 16:06:02
.. solo busco una forma de saber si la fecha actual es menor , igual o mayor a la del limite de la licencia.

¿y para que necesitas restar fechas si solo buscas eso?

Con un "If TuFecha > Now then showmessage('fecha mayor');" sería suficiente, ¿no? :confused:

DaysBetween solo considera los días completos, tal vez a eso se deba "los errores" que mencionas. Es decir, la función DaysBetween(1900-01-01 00:00:00, 1900-01-01 23:59:59) te va a regresar 0 porque le falta un segundo para completar el día. Si quieres con fracciones, deberías utilizar DaySpan.

Y finalmente, para conocer todos los detalles de daysbetween, dayspan y comparedate, lo mejor que puedes hacer es presionar F1 en delphi y revisar la ayuda sobre estas funciones, la cuál está muy completa y hasta ejemplos vas a encontrar.

Caro
03-03-2009, 16:31:52
Pero me llamo la atencion lo de la funcion CompareDate, me podras explicar un poquito como se usa o que retorna?
Muchas Gracias!!

Hola de nuevo pablo, como te dijo contraveneno, no necesitas restar la fechas, con una comparación fechalimite>fechaActual ya te valdría, sobre la función CompareDate recibe como parametro dos fechas y te devuelve -1 si la primera fecha es menor que la segunda, 0 si son iguales y 1 si la primera es mayor que la segunda.


if CompareDate(FechaActual, FechaLimite)=1 then
showmessage('La fecha actual es mayor a la fecha limite');


Saluditos

pablopessoa
03-03-2009, 23:47:27
Muchas Gracias por ayudarme!!
Tanto una solucion como la otra me vienen muy bien, ya me parecia que tenia que ser algo simple y que para variar yo la estaba complicando demasiado...
Gracias nuevamente y saludos!