| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Foxpro/Clipper/Dbase > Разность дат |
| Автор: nitr 3.6.2007, 23:02 |
| Уважаемые, столкнулся с такой задачкой (я в фокспро только по хелпам ориентируюсь мне надо определить возраст человека в годах от конкретной даты, т.е. к примеру, человек несовершеннолетний. В SQL мне просто, а в Фоксе не смог аналоги функций найти... Вот как это выглядит (один из вариантов) в SQL DATEADD(YEAR, -18, '2007.31.05') >= born_date, т.е. вычитает 18 лет от конкретной даты (не просто 2007-18, а календарных) и сравниваем с датой рождения. Добавлено @ 12:16 Вот уточняю в чем загвоздка: если человек родился 05.06.2000 , а отчет ведётся от 01.01.2007, то ему не 7 лет Заранее благодарю за помощь! P.S.: если что-то не до конца объяснил, извини, спрашивайте, уточню. |
| Автор: nitr 3.6.2007, 23:24 | ||
есть одна мысль, но как-то страшно от погрешностей (високосные года)
есть др. варианты с учетом високсных...? |
| Автор: Данкинг 3.6.2007, 23:35 | ||
Показывает разницу между сегодняшней датой (date() ) и датой рождения (dat - переменная или поле в таблице). |
| Автор: nitr 3.6.2007, 23:35 | ||
вот ещё нашел (но так же не определяет високсные :( ):
жду от вас вариантов |
| Автор: Данкинг 3.6.2007, 23:38 |
| GOMONTH - я такой функции не знал даже. |
| Автор: nitr 3.6.2007, 23:40 |
| Данкинг, данная ф-ция считает високосные? |
| Автор: Данкинг 3.6.2007, 23:45 |
| Не знаю, не пробовал! |
| Автор: nitr 3.6.2007, 23:57 |
если человек родился 05.06.2000 , а отчет ведётся от 01.01.2007, то ему не 7 лет P.S.: немного сам уже запутался, но сейчас уже уточнил, т.е. считать надо днями... Добавлено через 58 секунд если же перегонять в дни обычными математическими способами, то ошибка или погрешность, т.к. есть високосные... |
| Автор: Cashey 6.6.2007, 13:50 |
| а причем тут високосные года при такой задачи? в задаче же достаточно просто поменять год, оставив в силе день и месяц. или не понятна задача |
| Автор: nitr 6.6.2007, 21:04 | ||
| Cashey, согласен, я тоже оп "первости" так и ответил. Меня попросили узнать... позже в вопросе я написал уточнение... Повторюсь: надо определить возраст от определённой даты, т.е. известны две даты. Как пример: дата отсчета - 31.05.2007 дата ДР - 30.11.1989 Если мы вычтим год, то получаем ему 18 лет, ну а реально видно что нет. Cashey, вы предлагаете сохранять, не понял для чего, уточните. Единственное решение, которым я помог человеку, тоже указал
т.е. в разности у нас количество дней, делим на среднее (365+365+365+366)/4, простое решение, но думал есть более распространненые решения. Извиняюсь, если повторно не смог объяснить суть вопроса. |
| Автор: nitr 7.6.2007, 23:16 | ||
Cashey, я же привел точный пример
Я выше указал свой пример с разностью ДАТ, и сказал, что получаем дни, вот и просил др. способы, которые дали бы ответ без погрешностей. Я сейчас не смогу показть при каких датах может быть необходим високосный год, но согласитесь, такое возможно, т.к. ДАТА1-ДАТА2 (в Фоксе) это ДНИ, даже если есть учёт вискоскных, а нужен возраст в "летах". Моё решение по определению возраста от определ. даты (но с погрешностью) (ДАТА1-ДАТА2)/365.25, просто расчитывал, что есть что-то иное. Спасибо всем!!! Благодарю. |
| Автор: Cashey 8.6.2007, 12:32 | ||||||
| nitr, я специально выбрал даты включающие и не включающие високосные года ну и что тут не так? сколько по вашему должно быть лет человеку с датой рождения 30.11.1989 когда наступит 31.05.2007 и 30.11.2007? и потом, что вам нужно в итоге? сделать выборку всех лиц у которых на дату Х не исполнилось полных 18 лет? тогда мой запрос
если хотите получить только количество полных лет между 2-мя датами тогда так:
Это решение несколько не точное. Ну как вы собираетесь определять полное количество лет? Взяв только целую часть от полученной дроби? Тогда посмотрите сколько лет получится при датах отчета '30.11.2007' и даты рождения '30.11.1989'. |
| Автор: nitr 8.6.2007, 14:02 |
| Спасибо. |