Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2009, 16:14   #1
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Вопрос Вычислить разницу между датами без учета года

Здравствуйте! Помогите в решении проблемы: есть дата, например 24.10.1994 типа TDateTime. Нужно вычислить число дней от сегодняшней даты до этой без учета года. Например: сегодня 20.08.2009, результат бы был 65 дней. Но если сегодня было бы 26.10.2009, ответ был бы не -2, а, учитывая что такое число будет только в след. году, кол-во дней до него.
В принципе, алгоритм я смогу сам сделать, только подскажите, как считать без учета года?
k1r1ch вне форума Ответить с цитированием
Старый 20.08.2009, 16:38   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
от сегодняшней даты до этой без учета года.
Что-то я не понял без учета какого года?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.08.2009, 17:26   #3
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Ну без разницы, считается что событие происходит каждый год, то есть между 24.10.1999 и 25.10.2029 - 1 день
k1r1ch вне форума Ответить с цитированием
Старый 20.08.2009, 17:40   #4
S_Yevgeniy
Форумчанин
 
Аватар для S_Yevgeniy
 
Регистрация: 08.07.2009
Сообщений: 246
Радость

Идея примерно такая нужно из даты вытащить день и месяц.
Код прилагается ну это не лучшее решение но какое есть.
Код:
////   переделываем дату в формат YYYY MM DD
    Text0:= DateToStr(Today);
    DecodeDate(Today,myYear,myMonth,myDay);
    Year:=IntToStr(myYear);
    Month:=IntToStr(myMonth);
    Day:=IntToStr(myDay);

    if (Length(Month))=1 then  Month:='0'+Month;
    if (Length(Day))=1   then  Day:='0'+Day;

    Text1:= Year+'.'+Month+'.'+Day;
//    showmessage(Text1);//}
////  переделываем дату в формат YYYY MM DD
Потом аналогично сделать с той датой, от которой считать.

Например, сегодня 20.08.2009 считаем от 29.07.2009 должны получить 22 дня.

Задаем массив в котором первое значение месяц второе сколько дней в месяце.
Далее нужно отнять от этого количество то с какой даты считать (31для июля -29 искомая получим 2) затем берем и складываем 2 плюс число дней в этого месяца 20 получаем результат.

Если несколько месяцев то нужно будет просматривать из массива и количество дней в том месяце.
Прости может ты найдешь Проше вариант я не давно в делфи но программировал в другом языке, там идея подобная но без массива.
___________________________________ __________________________
Если я вам помог, добавьте отзыв '+' я буду благодарен ( иконка весов в углу!!!)
Да прибудет с Вами свет и радость!!!
S_Yevgeniy вне форума Ответить с цитированием
Старый 20.08.2009, 17:43   #5
S_Yevgeniy
Форумчанин
 
Аватар для S_Yevgeniy
 
Регистрация: 08.07.2009
Сообщений: 246
Лампочка

Ну в вашем случае не учитывайте Year
Да прибудет с Вами свет и радость!!!
S_Yevgeniy вне форума Ответить с цитированием
Старый 20.08.2009, 17:56   #6
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Вопрос

Вообще о программе: она напоминает о дне рожденья или другом празднике в нужный день, значения хранятся в БД.
Так вот я подумал, а что если в начале каждого года переделывать год всех дат в БД на новый. Тогда все будет работать!
Но вопрос: как изменить год в дате? Можно например вывести его с помощью DecodeDate, прибавить 1 и... А как собрать обратно в TDateTime?
k1r1ch вне форума Ответить с цитированием
Старый 20.08.2009, 18:03   #7
S_Yevgeniy
Форумчанин
 
Аватар для S_Yevgeniy
 
Регистрация: 08.07.2009
Сообщений: 246
По умолчанию

Ну а зачем усложнять то??? Введите даты и ФИО именинника в StringGrid например и сохраните их в файл. Программа при открытие сразу должна читать этот файл потом проходит и проверяет даты с текущей только без года. И выводит в свободном месте сколько дней до дня рождения.
Удачи вам. Дату можно хранить как строку только проверяйте правильно ли ее набрали.
Да прибудет с Вами свет и радость!!!
S_Yevgeniy вне форума Ответить с цитированием
Старый 20.08.2009, 18:04   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

function EncodeDate(Year, Month, Day: Word): TDateTime;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.08.2009, 18:15   #9
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Хорошо

2Пепел Феникса: Спасибо!
2S_Yevgeniy: Во-первых, с базой данных удобней, во-вторых, это еще вопрос, что легче - мучаться со сравнениями или просто прибавлять 1 раз в год!
k1r1ch вне форума Ответить с цитированием
Старый 20.08.2009, 18:23   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
function CompareDayAndYear(Date1,Date2:TDateTime):boolean;
var Y1,Y2,M1,M2,D1,D2:word;
begin
 Result:=false;//привычка
 DecodeDate(Date1,Y1,M1,D1);
 DecodeDate(Date2,Y2,M2,D2);
 if (M1=M2)and(D1=D2) then Result:=true else Result:=false;
end;
можно такую функу написать...
вернет true если день и месяц совпадают
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 20.08.2009 в 18:59. Причина: сказал функа а написал процедурку...исправил
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разница между датами в месяцах Andre1723 SQL, базы данных 1 21.06.2009 17:53
выборка между двумя датами UnChanter БД в Delphi 1 30.03.2009 21:09
Разница между датами kykysya Общие вопросы Delphi 8 26.03.2009 18:22
С++: найти число дней между 2 датами kissel Помощь студентам 2 15.03.2009 17:18
Разница между датами deenka БД в Delphi 3 31.01.2008 13:21