PDA

View Full Version : سوال: محاسبه وجه بین دو تاریخ



Fastdesign
جمعه 14 بهمن 1390, 11:40 صبح
سلام

دارم برنامه ای برای اجاره فیلم می نویسم . ولی با یک مشکل :

با فرض اینکه اجاره هر روز فیلم 500 تومان باشه . مثلا اگه یه مشتری تاریخ 1390/11/10 فیلم را اجاره کرد و تاریخ 1390/11/15 فیلم را به فروشنده تحویل داد . اون موقع باید محابه تعداد روز به چه صورت انجام بگیره ؟

دوستان نیاز به راهنمایی دارم .
با تشکر

SAASTN
جمعه 14 بهمن 1390, 12:32 عصر
بهتره تاریخ ها رو بصورت TDateTime ذخیره کنید و فقط موقع نمایش از مبدل های هجری شمسی استفاده کنید. در اینصورت برای محاسبه روزهای بین دو تاریخ می تونید از DateUtils.DaysBetween استفاده کنید.

Fastdesign
جمعه 14 بهمن 1390, 13:26 عصر
یعنی هیچ راه دیگه ای ندارم؟

tiphooo
جمعه 14 بهمن 1390, 14:10 عصر
اگر خیلی اصرار دارید به صورت شمسی تاریخها را ذخیره کنید یک Function بسازید (در دیتابیستان در SQL)که کار همان DaysBetween را برای شما انجام دهد مانند تابع زیر البته سال کبیسه را خودتان در آن بگنجانید .و اگر در خود دلفی خواستید این کار را بکنید به جای SubString از Copy استفاده کنید بقیه اش تقریبا همان می شود.

CREATE FUNCTION [dbo].[fx_DateDifference] (
@Date1 varchar(10),
@Date2 varchar(10)
)
RETURNS smallint
AS
BEGIN

DECLARE @Year1 SMALLINT,@Month1 SMALLINT,@Day1 SMALLINT,
@Year2 SMALLINT,@Month2 SMALLINT,@Day2 SMALLINT,@SumDays smallint
SELECT @Year1=Cast(SUBSTRING(@Date1,1,4) AS SMALLINT),
@Month1=Cast(SUBSTRING(@Date1,6,2) AS SMALLINT),
@Day1=Cast(SUBSTRING(@Date1,9,2) AS SMALLINT),
@Year2=Cast(SUBSTRING(@Date2,1,4) AS SMALLINT),
@Month2=Cast(SUBSTRING(@Date2,6,2) AS SMALLINT),
@Day2=Cast(SUBSTRING(@Date2,9,2) AS SMALLINT)

SET @Day1=@Day1 - @Day2
SET @Month1=@Month1 - @Month2
SET @Year1=@Year1 - @Year2
SET @SumDays=@Year1 * 365

IF @Month1<7
SET @SumDays=@SumDays +(@Month1 * 31)
ELSE
SET @SumDays=@SumDays +(@Month1 * 30)

SET @SumDays=@SumDays +@Day1

RETURN (@Day1)

END






و به صورت زیر استفاده کنید
SELECT dbo.fx_DateDifference('1390/11/15','1390/11/10') * 500
که قاعدتا مقادیر تاریخها و وجه مورد نظر را شما به صورت متغیر در نظر گرفته اید.