Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/69: Рейтинг темы: голосов - 69, средняя оценка - 4.55
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317

Работа с датами (DateTimePicker)

14.02.2010, 21:09. Показов 14840. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
на форме два компонента DateTimePicker и один Edit, мне нужно расчитать стаж, я задаю начало и конец периода, вычитаю из конца начало и хочу получить примерно вот это 15 дней 8 месяцев 6 лет стажа
ну или хотябы это 15.08.06, а получаю вот это 29.11.1909.
Пробовал через функции MonthsBetween, DaysBetween, YearsBetween, получаю следующее:
3621 дней 118 месяцев 9 лет стажа! Тоже не вариант!
Я прошу подкорректировать код так чтобы стаж считался корректно, с учётом високосных годов и остальных мелочей которые сам DateTimePicker учитывает! Мне просто надо написать код, и всё....
Из написанного кода я сам подмечу ошибки и в дальнейшем учту их, я сторонник практики!!! Лучше один раз увидеть чем сто раз услышать!

Приложение: Stage_2009.zip - первый вариант
Stage_7.zip - второй вариант (с применением встроенных функций в модуль DateUtils)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.02.2010, 21:09
Ответы с готовыми решениями:

Работа с DateTimePicker.
Есть 2 DateTimePicker. Надо сделать так, чтобы при нажатии на CheckBox, то есть при выставлении галочки дата в них убиралась, и они...

Работа с datetimepicker
Здравствуйте помогите пожалуйста с таким вопросом!!! У меня есть datetimepickerв котором я выставляю дату и есть Edit в котором я ставлю...

Работа с датами
Всем привет,помогите ,пожалуйста, с программой, сам не разберусь никак. Приложение с двумя однострочными редакторами и кнопкой вычислить....

34
 Аватар для Biggemot
163 / 140 / 23
Регистрация: 28.12.2009
Сообщений: 365
15.02.2010, 16:10
число дней между двумя датами
Delphi
1
2
3
4
5
6
var
  S: extended;
begin
  S:= DateTimePicker2.Date-DateTimePicker1.Date;
  Edit1.Text:=FloatToStr(S);
end;
1
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
15.02.2010, 16:43  [ТС]
Я этот код изначально и писал вот только сами посмотрите что он выдаёт и посчитайте.....
0
 Аватар для Biggemot
163 / 140 / 23
Регистрация: 28.12.2009
Сообщений: 365
15.02.2010, 16:56
я то как раз посмотрел, у меня все правильно.
обрати внимание на S: extended;
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
15.02.2010, 17:46  [ТС]
ну а я и твой код испытал, отличий ноль в результате... сам сравни
и ещё, мне надо не только дней, но и месяцев и лет..

Добавлено через 19 минут
Раз ничё у меня уже неделю не получается то хочу спросить как мне написать эту прогу для вычисления стажа так чтоб учитывались годы в которых февраль равен 29 дням?
Вот пример онлайн проги: http://whoyougle.ru/time/seniority
0
 Аватар для Biggemot
163 / 140 / 23
Регистрация: 28.12.2009
Сообщений: 365
15.02.2010, 17:50
открой свой Stage_2009 проект
и замени в ButtonClick на
Edit1.text:=FloatToStr(DateTimePicker2.Date - DateTimePicker1.Date);
месяцев и лет сам догадайся как сделать
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
15.02.2010, 19:12  [ТС]
Проблема не решена! Будут ещё предложения или тут мне никто не поможет?
0
 Аватар для Biggemot
163 / 140 / 23
Регистрация: 28.12.2009
Сообщений: 365
15.02.2010, 21:36
обычно никто не помогает тем кто ждет готового решения, и не хочет пошевелить своими мозгами
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
16.02.2010, 16:05  [ТС]
А по вашему я жду готового решения? Я тут наизнанку выворачиваюсь, на нескольких форумах, разные варианты прорабатываю, выкладываю исходники, а ответ не тот который нужен а мне ещё и говорят что мозгами шевелить нехочу, я шевелю как могу если вы считаете что я жду я готового решения то тогда вообще не пишите мне, раз вы такой умный и всезнающий.....
Я стараюсь, но этот форум и призван для того чтобы помочь, а я что то помощи не вижу - одни упрёки!
0
 Аватар для Biggemot
163 / 140 / 23
Регистрация: 28.12.2009
Сообщений: 365
16.02.2010, 16:28
я тебе дал работающий кусок кода, находящий число дней. и что я получаю вместо благодарности? ты уперся что он не работает, хотя я своими глазами вижу что работает.
из даты и количества дней можно узнать годы и месяцы...
успехов тебе
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
16.02.2010, 16:51  [ТС]
Цитата Сообщение от Biggemot Посмотреть сообщение
я тебе дал работающий кусок кода, находящий число дней. и что я получаю вместо благодарности? ты уперся что он не работает, хотя я своими глазами вижу что работает.
из даты и количества дней можно узнать годы и месяцы...
успехов тебе
я ещё раз повторяю мне нужно чтоб учитывались и високосные годы

да и формулу я уже другую взял....
к примеру вводим следующие даты:
08.12.1991 - 16.07.1991 = 1991007016 - 1991012008 = 4992 - 970 = 4022+1 (4 месяца 23 дня)

01.11.1992 - 23.12.1991 = 1992011001 - 1991012023 = 998978 - 988970 =10008+1 = 10009 (10 месяцев 9 дней)
всего три разряда: 970, 988000, 988970 пример: 1)18988000 (18 года, 988 (разряд месяцев)), 000 (дни - в случе если их нет) - от этого числа в данномслуче отнимаем 988000
2) 18991971 - от этого отнимаем 988970 - понятно что 970 - разряд дней
0
4040 / 2652 / 582
Регистрация: 11.09.2009
Сообщений: 9,465
16.02.2010, 16:55
Не кипятись, >arty<

В старых версиях Delphi действительно с датами не всё было в порядке, но в теперешних, поверь, всё O'k.
На приложенной картинке - рабочий проект. Delphi 7.

Р.S.
Учёт високосных при рассчёте стажа легко делается, если вспомнить, что в году не 365, а 365,25 дней.
Миниатюры
Работа с датами (DateTimePicker)  
0
 Аватар для Biggemot
163 / 140 / 23
Регистрация: 28.12.2009
Сообщений: 365
16.02.2010, 17:15
еще раз повторяю, зная даты можно учесть и високосность года. простым циклом с if

Добавлено через 18 минут
Цитата Сообщение от i8085 Посмотреть сообщение
Учёт високосных при рассчёте стажа легко делается, если вспомнить, что в году не 365, а 365,25 дней.
так делать не очень хорошо. стаж лет не может же быть например 10,25лет. лучше проверять каждый год является ли он високосным в цикле от начального года до конечного-1
Delphi
1
2
y:=2000
if (y mod 4) = 0 then ...
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
16.02.2010, 17:21  [ТС]
Цитата Сообщение от Biggemot Посмотреть сообщение
еще раз повторяю, зная даты можно учесть и високосность года. простым циклом с if

Добавлено через 18 минут

так делать не очень хорошо. стаж лет не может же быть например 10,25лет. лучше проверять каждый год является ли он високосным в цикле от начального года до конечного-1
Delphi
1
2
y:=2000
if (y mod 4) = 0 then ...
приведите пример цикла пожалуйста, с ними у меня не очень лады, я почти написал прогу, но с учётом вашей поправки надо ввести цикл, и плюс создать выходную форму, но она должна быть альбоиной а как это сделать я незнаю, я вроде делал но выводит всё равно книжным, подскажите плизззз..... Ведь в цикле надо задать чтоб за каждый високосный год прибавляли по одному деньку, а это я даже пока что не представляю....

Приложение: Stage_7.zip
0
4040 / 2652 / 582
Регистрация: 11.09.2009
Сообщений: 9,465
16.02.2010, 17:21
Biggemot
Согласен.
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
16.02.2010, 17:58  [ТС]
А нельзя ли цикл сделать так: так как я пользуюсь компонентами для работы с датами а они знают что такое високосный год, то соответственно при разности они выдают общее количество дней с учётом этих годов и я могу точно определить сколько лет стажа и месяцев, остатётся только подсчитать сколько раз нам повстречался вискосный год (например 13 лет стажа - 3 раза, 16 лет - 4) и просто прибаляем количество повторений (дней) к оставшимся дням, если они больше 30 то месяцы увеличиваем на один, а остаток если таковой имеется записываем в дни...
Я всё правильно продумал?
0
4040 / 2652 / 582
Регистрация: 11.09.2009
Сообщений: 9,465
16.02.2010, 18:01
Так не получится. Например, если стаж 3 года, один из них может быть високосным, а может быть и ни одного. Если 5 лет - может быть один високосный, а может и два... Надо проверять.
0
 Аватар для Biggemot
163 / 140 / 23
Регистрация: 28.12.2009
Сообщений: 365
16.02.2010, 18:03
>arty<, не правильно. в 13 годах может быть и 3 високосных и 4
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
16.02.2010, 18:06  [ТС]
Цитата Сообщение от Biggemot Посмотреть сообщение
>arty<, не правильно. в 13 годах может быть и 3 високосных и 4
тогда я вообще в растерянности и незнаю как это реализовать

Похоже придётся бросить идею и пускай юзеры руками считают и печатают своё заключение......
У меня уже нервы на исходе просто, я незнаю куда дальше копать.....
0
 Аватар для Biggemot
163 / 140 / 23
Регистрация: 28.12.2009
Сообщений: 365
16.02.2010, 18:06
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.Button1Click(Sender: TObject);
var
  Days: Extended;
  i: Integer;
  Years: Integer;
  Temp: Integer;
begin
  Years:=0;
  Days:=DateTimePicker2.Date-DateTimePicker1.Date;
  for i := YearOf(DateTimePicker1.Date) to YearOf(DateTimePicker2.Date) do begin
    if (i mod 4) = 0 then Temp:=366
    else Temp:=365;
    if Days>=Temp then begin
      Days:=Days-Temp;
      inc(Years);
    end
    else Break;
  end;
  Label1.Caption:=IntToStr(Years)+' лет '+FloatToStr(Days)+' дней';
end;
код проверяется легко: с 01.01.2008 до 01.01.2009 и с 01.01.2009 до 01.01.2010 получается ровно 1 год, хотя 2008 - високосный
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.02.2010, 18:06
Помогаю со студенческими работами здесь

Работа с датами
Хотел написать обработчик события OnClick для компонента Button, который отображает в компоненте Label разность в днях и часах между...

Работа с датами
Не могу реализовать такую тему. Сразу пример: допустим в Edit вписываю 61. В label должен отобразить сколько это будет лет, месяцев и дней....

Работа с датами
делаю следующее var Y,M,D:word; begin decodedate(Date,Y,M,D); //разбиваю дату if (EncodeDate(Y, M,...

Работа с датами в Delphi
Здравствуйте! Подскажите пожалуйста как работать с датами в делфи, преподователь сказал что существуют специальные типы данных и компоненты...

Как сложить поля dbedit и datetimepicker и результат записался в другой datetimepicker
procedure Tpods4et.DateTimePicker1Change(Sender: TObject); var d:string; a:integer; begin a:=strtoint(dbedit4.Text); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru