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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 14.02.2010, 09:34   #1
>>arty<<
Пользователь
 
Регистрация: 26.06.2009
Сообщений: 78
Вопрос Вопрос по дате и компоненту DateTimePicker???

У меня на форме 2 компонента DateTimePicker, мне в итоге нужно вычислить период, вычитаю из второго первый и получаю что то типа этого:
вычитаю из 13.08.2009 13.02.1995 и получаю 30.06.1914
по идее должен получить только лишь 14 лет!!! А получаю то же самое только приписывается 19. Читал что Делфи автоматически это подставляет, но как это исправить ведь мне нужно совсем другое!:confuse d:
>>arty<< вне форума
Старый 14.02.2010, 11:00   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Мoдуль DateUtils.

Вот эти функции тебе знакомы ??
Код:
function YearsBetween(const ANow, AThen: TDateTime): Integer;
function MonthsBetween(const ANow, AThen: TDateTime): Integer;
function WeeksBetween(const ANow, AThen: TDateTime): Integer;
function DaysBetween(const ANow, AThen: TDateTime): Integer;
function HoursBetween(const ANow, AThen: TDateTime): Int64;
function MinutesBetween(const ANow, AThen: TDateTime): Int64;
function SecondsBetween(const ANow, AThen: TDateTime): Int64;
function MilliSecondsBetween(const ANow, AThen: TDateTime): Int64;
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума
Старый 14.02.2010, 11:04   #3
>>arty<<
Пользователь
 
Регистрация: 26.06.2009
Сообщений: 78
Вопрос

А можно немного пояснить? В книге про это к сожалению не описано....
А занть хотелось бы что в моём случае поможет и как....
>>arty<< вне форума
Старый 14.02.2010, 11:26   #4
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Вот смотри.
Вложения
Тип файла: rar Даты.rar (9.2 Кб, 64 просмотров)
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума
Старый 14.02.2010, 12:04   #5
>>arty<<
Пользователь
 
Регистрация: 26.06.2009
Сообщений: 78
По умолчанию

даже не открывает, пишет uot of memory.....

12:43

мне бы просто показать как от моей проблемы быстро избавится, ведь используя этот компонент я убиваю двух зайцев:
юзер может сам выбирать нужную дату, плюс снимается вопрос о високосных годах, ведь раз в 4 года в феврале 29 дней

У нас принято пользоваться кнопочкой "Правка", дабы не плодить посты подряд, друг за другом.
Читаем правила. Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор


А любая проблема запросто решается установкой курсора на название неизвестной функции и последующим нажатием на волшебную клавишу F1.

Последний раз редактировалось mihali4; 14.02.2010 в 21:16.
>>arty<< вне форума
Старый 14.02.2010, 20:45   #6
>>arty<<
Пользователь
 
Регистрация: 26.06.2009
Сообщений: 78
Вопрос

Вот сделал по другому с применением функций, но тоже не совсем то что нужно, получается типа вот этого: 702 дней 23 месяцев 1 лет стажа!
Посмотрите пожалуйста исходник и если что подправьте и в коментах напишите что я упустил...
Приложение: Stage_7.zip

P.S. Я уже все форумы облазил и везде не могут дать чёткого ответа на мой вопрос почему так и как это исправить??? Если толком сами не знаете как нужно подправить код чтоб корректно работал, то лучше не пишите, прошу высказываться по делу!!!

Последний раз редактировалось >>arty<<; 14.02.2010 в 20:48.
>>arty<< вне форума
Старый 14.02.2010, 21:23   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вам же четко указали функции...
Что еще ?
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(YearsBetween(DateTimePicker1.Date,DateTimePicker2.Date)));
end;
Получите вожделенное 14...

З.Ы. Замечания модератора - всегда "по делу". Читаем правила.
mihali4 вне форума
Старый 14.02.2010, 21:54   #8
>>arty<<
Пользователь
 
Регистрация: 26.06.2009
Сообщений: 78
По умолчанию

а сами то проверьте как с таким кодом будет работать прога! Элементарно скачать исходник который я приложил и самому попробовать, вас тоже явно результат не устроит! Мне нужно не только вожделённое 14 но и день и месяц, а с применением подобных функций расчёт ведётся не так как надо! Попробуйте сами и посмотрите что получится, я уже на это "замечание" который раз даю ответ(на разных форумах)! Просто запустите прогу и всё! Сами увидите что меня не устраивает!

Вот смотрите и попробуйте:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, DateUtils;

type
  TForm1 = class(TForm)
    DateTimePicker1: TDateTimePicker;
    DateTimePicker2: TDateTimePicker;
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  d1, d2: TDateTime;
begin

  d1:= DateTimePicker1.DateTime;
  d2:= DateTimePicker2.DateTime;

Edit1.Text:=IntToStr(DaysBetween(d1,d2)) + ' дней ' +
IntToStr(MonthsBetween(d1,d2))+ ' месяцев '
+ IntToStr(YearsBetween(d1,d2)) + ' лет стажа!';
end;

end.
Еще одно замечание:
У нас принято оформлять код специальным тэгом - при помощи кнопочки "#".
Только...
И не значком #.
И не РНР-кодом.
И не значком цитаты.
И не собственными "ручками".
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор

Последний раз редактировалось mihali4; 15.02.2010 в 00:08.
>>arty<< вне форума
Старый 15.02.2010, 00:16   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

С функциями все в порядке.
Просто есть еще пара функций:
DecodeDate
EncodeDate

Вы используете во всех сравнениях одно и то же количество дней между датами.
И результат получаете один и тот же, но выраженный в днях, месяцах или годах.
Можете сделать, например, так:
Код:
razn:=d1-d2;
DecodeDate(razn, Year, Month, Day);
где
Код:
razn: TDateTime;
Year, Month, Day: Word;
И все получится.
Форум у нас тихий, психовать не стоит, тем более по такому ничтожному поводу.
Еще раз напомню о пользе F1.

Последний раз редактировалось mihali4; 15.02.2010 в 00:18.
mihali4 вне форума
Старый 15.02.2010, 11:23   #10
>>arty<<
Пользователь
 
Регистрация: 26.06.2009
Сообщений: 78
По умолчанию

а сразу так было нельзя написать зачем всё так усложнять то надо было раз знали?

Попробовал, результат такой же как и при данном действии
Код:
Edit1.text:=DateToStr(DateTimePicker2.DateTime(14.02.2010) - DateTimePicker1.DateTime(14.05.1995));
03.10.1914 - Ответ не совсем такой который ожидал я!

Если знаете как это сделать можете описать код?

Раз ничё у меня уже неделю не получается то хочу спросить как мне написать эту прогу для вычисления стажа так чтоб учитывались годы в которых февраль равен 29 дням?
Вот пример онлайн проги: http://whoyougle.ru/time/seniority

Неужели никто не поможет?

Последний раз редактировалось >>arty<<; 15.02.2010 в 18:45.
>>arty<< вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по компоненту TDateTimePicker SANIOK_AV Общие вопросы Delphi 5 05.06.2009 13:47
Вопрос по компоненту StringGrid Vla9240 Помощь студентам 2 14.05.2009 22:36
Вопрос по компоненту MonthCalendar AIst Компоненты Delphi 1 02.04.2009 13:25
Вопрос по DateTimePicker MasterofCDM Компоненты Delphi 3 01.04.2009 10:36