![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
AlexanderI |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 9.7.2004 Репутация: 1 Всего: 3 |
Подскажите как отнять дату от даты и получить разницу между ними т.е. g=Год m=Месяцев d=Дней
Пользовался YearsBetween но чтото с днями там путаница. Подскажить что нибудь. ![]() --------------------
Магазин детских игрушек | Авто ВАЗ |
|||
|
||||
z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 11 Всего: 102 |
-------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
AlexanderI |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 9.7.2004 Репутация: 1 Всего: 3 |
Я так и делал. Но эта функция выводит или общее число дней, или общее число месяцев, или общее число лет.
Например я задаю две даты: 01.01.2004 и 01.01.2005 Результат должен быть таким: g = 1 m = 0 d = 0 или 01.01.2004 и 04.03.2005 g = 1 m = 2 d = 3 Как мне лучше такое реализовать ? чтоб и весокосные дни учитывались... --------------------
Магазин детских игрушек | Авто ВАЗ |
|||
|
||||
z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 11 Всего: 102 |
AlexanderI Если тебе нужна разница дней (0..31) месяцев (0..12) и годов тогда так:
в таком случае високосность года тогда роли не играет, или я тебя опять непонял? -------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
AlexanderI |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 9.7.2004 Репутация: 1 Всего: 3 |
Я уже сам запутался
![]() У меня задача стоит так: Есть человек (рабочий). У него имеется стаж работы (на предыдущей работе): 5 дней 2 месяца 7 лет (d1,m1,g1). На последнию работу его приняли 04.02.05 числа (d2,m2,g2). Формирую отчёт на сегоднешнее число 17.04.05 (d3,m3,g3). Вот мне и нужно От сегодняшнего числа отнять число когда его приняли на работу, и прибавить его стаж на предыдущей работе. Что мне лучше подайдёт ? Это сообщение отредактировал(а) AlexanderI - 17.4.2005, 14:01 --------------------
Магазин детских игрушек | Авто ВАЗ |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Вот, бери. Юнит с наиболее нужными функциями работы с датами. Писал кагда-то для себя, но вижу, что и тебе не помешает.
Присоединённый файл ( Кол-во скачиваний: 36 ) ![]() -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
to AlexanderI.
Интересно, а когда ты говоришь: "Он работал 3 года 1 месяц и 3 дня", какой месяц ты имеешь ввиду? От этого зависит сколько в нем было дней 28, 28, 30, или 31? Т.е., например, если d1 = 01 янв 2001 и d2 = 01 фев 2001, то разница между этими датами составляет 31 день. Но, если это записать в N месяцев и N дней, то возможны варианты: 1 месяц 0 дней (если имеется ввиду месяц с 31 днем) 1 месяц 1 день (если имеется ввиду месяц с 30-ю днями) 1 месяц 2 дня (если имеется ввиду месяц с 29-ю днями) 1 месяц 3 дня (если имеется ввиду месяц с 28-ю днями) Какой ответ ты считаешь правильным? Поэтому, когда речь идет о том что прошло какое то время, например срок работы, то говорить можно лишь о числе прошедших дней. -------------------- Все знать невозможно, но хочется |
|||
|
||||
AlexanderI |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 9.7.2004 Репутация: 1 Всего: 3 |
Конешно спасибо за помощь, но Это тоже самое что и YearsBetween. Не помогло. --------------------
Магазин детских игрушек | Авто ВАЗ |
|||
|
||||
AlexanderI |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 9.7.2004 Репутация: 1 Всего: 3 |
Вот я сам низнаю. У меня есть программа написанная под DOS. Мне её нужно переписать под Винду. Исходников нет, ничего нет. Она выдаёт вот такие результаты: Начальная дата | Конечная дата | Результат (лет, месяцев, дней) 01.02.2002_______20.04.2005_____3, 2, 19 17.09.1972_______20.04.2005_____32,7,3 17.01.1994_______20.04.2005_____8,4,7 01.09.1993_______20.04.2005_____11,0,8 Это сообщение отредактировал(а) AlexanderI - 20.4.2005, 21:13 --------------------
Магазин детских игрушек | Авто ВАЗ |
|||
|
||||
Cetus |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 18.4.2004 Репутация: нет Всего: 1 |
01.09.1993_______20.04.2005_____11,0,8
по моему прога глючит ![]() Если я правильно понял то задача решается следующим алгоритмом: function GetYDM(DateFrom, DateTo : TDate; var Y,M,D : integer): boolean; var Yl, Ml, Dl, l, Yh, Mh, Dh : integer; begin Result := False; if (DateFrom > DateTo) then exit else Result := True; Yl := YearOf(DateFrom); Ml := MonthOf(DateFrom); Dl := DayOf(DateFrom); Yh := YearOf(DateTo); Mh := MonthOf(DateTo); Dh := DayOf(DateTo); // calculate days D := Dh - Dl; l := 1; if (D < 0) then case Ml of 1,3,5,7,8,10,12 : d := 31 + d; 2 : if (Yl mod 4) = 0 then d := 29 + d else d := 28 + d; 4,6,9,11 : d := 30 + d; end else l := 0; // calculate monthes M := Mh - Ml - l; l := 1; if (M < 0) then M := 12 + M else l := 0; // calculate years Y := Yh - Yl - l; end; --------------------
Легко внести изменения в код.Трудно сделать это корректно. |
|||
|
||||
Петрович |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Ну если не знаешь, то опираться надо на семантику задачи. А так, это попытка реализовать кишки черного ящика.
На мой взгляд, это полный бред. Например, каким это образом она считает что между датами 17.01.1994 и 20.04.2005 прошло всего 8 лет? Короче, таких вопросов здесь много, если внимательно посмотреть. Повторюсь, критерием истины может быть только семантика задачи. -------------------- Все знать невозможно, но хочется |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |