Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Вниз

Количество дней между датами?   Найти похожие ветки 

 
off   (2003-07-14 14:42) [0]

Есть две даты в формате String. Как получить кол-во дней между ними?


 
Семен Сорокин   (2003-07-14 14:44) [1]

Result := Floor(StrToDate(str2) - StrToDate(str1))


 
off   (2003-07-14 14:47) [2]

Не помогает все равно 0 выдает


 
NickBat   (2003-07-14 14:57) [3]

DaysBetween


 
Palladin   (2003-07-14 14:57) [4]

значит даты одинаковые


 
off   (2003-07-15 06:21) [5]

> Palladin © (14.07.03 14:57)
Не цифры я пока между собой различаю


 
off   (2003-07-15 06:26) [6]

Хотя попробовал написать в отдельном проекте, так все работает. А вот при работе с InterBase по непонятной мне причине глючит :-(
Всем спасибо, попробую побороть этот баг.


 
Anatoly Podgoretsky   (2003-07-15 09:16) [7]

А ты не так пиши, а так
Result := TRUNC(StrToDate(D1)) - TRUNC(StrToDate(D2));
и это будет правильно.



 
Song   (2003-07-15 21:45) [8]

DateOf(первая)-DateOf(вторая)


 
off   (2003-07-21 13:29) [9]

А количество месяцев?


 
Anatoly Podgoretsky   (2003-07-21 13:44) [10]

А сколько дней в месяце?


 
off   (2003-07-21 13:51) [11]


> Anatoly Podgoretsky © (21.07.03 13:44)
> А сколько дней в месяце?

Зависит от месяца!


 
off   (2003-07-22 08:47) [12]

А есть ли функция определения количеста дней в месяце или так считать придется?


 
Anatoly Podgoretsky   (2003-07-22 08:52) [13]

А причем тут месяц, когда после d1-d2 ты получишь скажем 30 дней и что ты будешь делать после этого


 
Zew   (2003-07-22 08:54) [14]



> А сколько дней в месяце?

Около 30 помойму


 
off   (2003-07-22 08:58) [15]

У меня на календарный месяц полагается норма (50 Mb), причем вне зависимости от продолжительности месяца. А если юзер юзал нетворк не весь месяц, а n-дней? Тогда надо посчитать сколько Мб юзверю полагается по нормативу в жтом месяце. Я бы использовал период в 30 дней, но начальство против


 
Still Swamp   (2003-07-22 09:12) [16]

Может я что пропустил, но
Result:integer;
DateBegin,DateEnd:TDateTime;

Result:=Trunc(DateEnd-DateBegin);

Целочисленное значение типа TDateTime - это дни. Дробное доли дня.


 
Anatoly Podgoretsky   (2003-07-22 09:14) [17]

Это совсем другой вопрос.
Тут не количество дней между датами, а контретный месяц, которы определяется так 1.mm.yyyy - last.mm.yyyy
А количество дней или по встроенным функциям или по формуле
N := 1.mm+1.yyyy(+перенос) - 1.mm.yyyy
ну а расчет по еще более простой формуле mb/n*k, учесть при неоюходимости не рабочии дни, если квота на них не распространяется, тогда n1 := n - holydays
В общем учебник по математике Пупкина.


 
off   (2003-07-22 09:21) [18]

Спасибо Anatoly я думал, может уже есть функция которая достает колво дней в месяце, ну так чтобы совсем ничего не считать.


 
dataMaster   (2003-07-22 09:33) [19]

function DifferenceDate(Date1, Date2:TDateTime):integer;
var
ds1, ds2:TTimeStamp;
begin
ds1:=DateTimeToTimeStamp(Date1);
ds2:=DateTimeToTimeStamp(Date2);
Result:=ds1.Date-ds2.Date;
end;


 
ValeraVV   (2003-07-22 09:33) [20]

DaysInAMonth function
Returns the number of days in a specified month of a specified year.
Unit:DateUtils
Delphi syntax: function DaysInAMonth(const AYear, AMonth: Word): Word;





 
off   (2003-07-22 09:49) [21]

Валерий Валерьевич, вы просто умница!



 
KPP   (2003-07-22 09:51) [22]

Если решать эту задачу(Есть две даты в формате String. Как получить кол-во дней между ними?) "в лоб", есть такой вариант:

//возвращает кол-во дней в месяце с учетом года
Function KolDayMoon(MM,YYYY:integer):byte;
begin
case MM of
1,3,5,7,8,10,12:result:=31;
2:begin
if IsLeapYear(YYYY)then result:=29
else result:=28;
end;
4,6,9,11:result:=30;
end;
end;


//разница в днях между двумя датами
Function RaznDayIn2Date(YYYYMMDD1,YYYYMMDD2:string):integer;
var
YYYY1,
YYYY2,
YYYY :integer;
i,MM1,DD1,MM2,DD2,MM,DD:byte;
Prom:string;

begin
result:=0;
if(StrToInt(YYYYMMDD2)=StrToInt(YYYYMMDD1))then exit;
if(StrToInt(YYYYMMDD2)>StrToInt(YYYYMMDD1))then begin
result:=-3;
exit;
Prom:=YYYYMMDD2;
YYYYMMDD2:=YYYYMMDD1;
YYYYMMDD1:=Prom;
end;
try
YYYY1:=StrToInt(copy(YYYYMMDD1,1,4));
MM1 :=StrToInt(copy(YYYYMMDD1,5,2));
DD1 :=StrToInt(copy(YYYYMMDD1,7,2));
except
result:=-1;
exit;
end;
try
YYYY2:=StrToInt(copy(YYYYMMDD2,1,4));
MM2 :=StrToInt(copy(YYYYMMDD2,5,2));
DD2 :=StrToInt(copy(YYYYMMDD2,7,2));
except
result:=-2;
exit;
end;

if DD1>DD2 then DD:=DD1-DD2
else begin
if MM1=1 then begin
MM1:=12;
dec(YYYY1);
end
else dec(MM1);
DD:=(DD1+KolDayMoon(MM1,YYYY1))-DD2;
end;
if MM1>=MM2 then MM:=MM1-MM2
else begin
MM:=(MM1+12)-MM2;
dec(YYYY1);
end;
YYYY:=YYYY1-YYYY2;

if YYYY<0 then begin
YYYY:=0;
//showmessage("Караул!");
end;

while YYYY<>0 do begin
if IsLeapYear(YYYY)then result:=result+366
else result:=result+365;
dec(YYYY);
end;
i:=0;
while MM<>i do begin
if (MM2+i)>12 then begin
MM2:=1;
inc(YYYY2);
end;
result:=result+KolDayMoon(MM2+i,YYYY2);
inc(i);
end;
result:=result+DD;
end;

может и топорно, но работает уже 4 года



 
KPP   (2003-07-22 09:54) [23]

Если решать эту задачу(Есть две даты в формате String. Как получить кол-во дней между ними?) "в лоб", есть такой вариант:

//возвращает кол-во дней в месяце с учетом года
Function KolDayMoon(MM,YYYY:integer):byte;
begin
case MM of
1,3,5,7,8,10,12:result:=31;
2:begin
if IsLeapYear(YYYY)then result:=29
else result:=28;
end;
4,6,9,11:result:=30;
end;
end;


 
KPP   (2003-07-22 09:55) [24]

прошу прощение за повторение - инет глюкнул ;((


 
Gooz   (2003-07-22 09:56) [25]

Удалено модератором
Примечание: Задай этот вопрос в потрепаться



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.009 c
14-10435
EvgeniyR
2003-07-17 11:54
2003.08.04
Отправка SMS-сообщений


3-10102
Alex_x
2003-07-14 13:34
2003.08.04
Немогу програмно установить свойство DataSource датасета


14-10420
Soft
2003-07-17 15:21
2003.08.04
Найдено эффективное средство борьбы со спамом


11-10156
Gandalf
2002-12-01 11:37
2003.08.04
Пора обновить FAQ


8-10314
sndanil
2003-04-14 14:43
2003.08.04
Hint на графике





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский