|
Количество дней до события
|
|||
---|---|---|---|
#18+
Здраствуйте, есть в таблице поле (god_rojd) типа date хранящее дату рождения. Мне нужно узнать разницу в днях между текущей датой и датой рождения, разницу выводить в TextBox. Все это нужно для установки фильтра, на форме есть кнопка "Показать именинников", при нажатии на кнопку должен установиться фильтр отображающий людей у которых до дня рождения осталось менее 30 дней. Формат даты: SET DATE GERMAN ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2009, 17:31 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
Где то недавно это обсуждалось :-) На страницы так 2-е, 3-и. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2009, 17:35 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
thisform.txtDateRojd.Value = DATE()-date_rojd ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2009, 17:35 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
http://www.sql.ru/forum/actualthread.aspx?tid=649550 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2009, 17:40 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
AK-Shah, твой спосо не канает, потому что тут учитывается год разница между 1988 и 2008 годом составит примерно 7000 дней. в итоге я никогда неполучу при таком способе, что до дня рождения человеку осталось 30 дней. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2009, 18:07 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
GoshaShttp://www.sql.ru/forum/actualthread.aspx?tid=649550 Ненашол там именно для моего случая примера. Я ту тему два раза читал до того как создал свою. Там промежутки и тд и тп. А мне надо конкретное количество дней до дня рождения. Я недогнал как сделать через промежутки. Пытался даже: В данном случае Date() имеет значени 30.04.09, а plan_sotr.god_rojd имеет значение 03.06.1988 thisfotm.text21.value = RIGHT(DTOS(DATE()),4)-RIGHT(DTOS(plan_sotr.god_rojd),4) При выполнении в текстебоксе получаю: 04300603 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2009, 18:29 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
set date german set century on ? ? INT(((YEAR(DATE())-YEAR({^1972.05.17}))*365.25)-(DATE() - {^1972.05.17})) Ps. до моего дня рождения осталось .... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2009, 21:27 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
DisaerЗдраствуйте, есть в таблице поле (god_rojd) типа date хранящее дату рождения. Мне нужно узнать разницу в днях между текущей датой и датой рождения, разницу выводить в TextBox. Все это нужно для установки фильтра, на форме есть кнопка "Показать именинников", при нажатии на кнопку должен установиться фильтр отображающий людей у которых до дня рождения осталось менее 30 дней. Формат даты: SET DATE GERMAN Это круто. TextBox.value=date()-god_rojd SET FILTER TO date()-god_rojd<30 Или надо с десяток ссылок в инете ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2009, 21:55 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
Guest12345set date german set century on ? ? INT(((YEAR(DATE())-YEAR({^1972.05.17}))*365.25)-(DATE() - {^1972.05.17})) Ps. до моего дня рождения осталось .... Спасибо очень помогло. Только у меня тут пришлось поменять фигурные скобки на круглые. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2009, 21:57 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
rewareDisaerЗдраствуйте, есть в таблице поле (god_rojd) типа date хранящее дату рождения. Мне нужно узнать разницу в днях между текущей датой и датой рождения, разницу выводить в TextBox. Все это нужно для установки фильтра, на форме есть кнопка "Показать именинников", при нажатии на кнопку должен установиться фильтр отображающий людей у которых до дня рождения осталось менее 30 дней. Формат даты: SET DATE GERMAN Это круто. TextBox.value=date()-god_rojd SET FILTER TO date()-god_rojd<30 Или надо с десяток ссылок в инете ? Так как ты написал нереботает нехера!!! Так сгодится только если у тебя год рождения и текущий год одинаковы. А когда у тебя разница в 20 лет будет, ты никогда число <30 неполучишь. иди проверь если невериш. разница между датами 2009 года и 1988 года примерно равны 7000 дням. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2009, 22:00 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
Disaer[quot Guest12345]set date german set century on ? INT(((YEAR(DATE())-YEAR({^1972.05.17}))*365.25)-(DATE() - {^1972.05.17})) Ps. до моего дня рождения осталось .... Спасибо очень помогло. Только у меня тут пришлось поменять фигурные скобки на круглые.[/quot Только надо смотреть если результат положительный, то до текущего события осталось столько дней сколько получается, а если отрицательный, значит событие уже прошло, и не совсем наверно правильно показывает, ну мысль наверно можно поправить в нужном направлении ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2009, 22:14 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
Guest12345Disaer[quot Guest12345]set date german set century on ? INT(((YEAR(DATE())-YEAR({^1972.05.17}))*365.25)-(DATE() - {^1972.05.17})) Ps. до моего дня рождения осталось .... Спасибо очень помогло. Только у меня тут пришлось поменять фигурные скобки на круглые.[/quot Только надо смотреть если результат положительный, то до текущего события осталось столько дней сколько получается, а если отрицательный, значит событие уже прошло, и не совсем наверно правильно показывает, ну мысль наверно можно поправить в нужном направлении Угу в некоторых случаях получается отрицательный ответ, поэтому я к этому результату длаю проверку. d = INT(((YEAR(DATE())-YEAR((plan_sotr.god_rojd)))*365.25)-(DATE() - (plan_sotr.god_rojd))) IF d>=0 thisform.text21.Value = d ELSE thisform.text21.Value = d+365 ENDIF ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2009, 22:26 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
Disaer Угу в некоторых случаях получается отрицательный ответ, поэтому я к этому результату длаю проверку. d = INT(((YEAR(DATE())-YEAR((plan_sotr.god_rojd)))*365.25)-(DATE() - (plan_sotr.god_rojd))) IF d>=0 thisform.text21.Value = d ELSE thisform.text21.Value = d+365 ENDIF Да, так в целом почти правильно, только 1 следующий день после рождения неправильно показывает 0 дней, а все остальные дни нормально12345 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2009, 22:34 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
Думаю так правильно будет SET TALK OFF SET DATE GERMAN SET CENTURY on CLEAR mydata={^1972.05.17} d1=INT(((YEAR(DATE())-YEAR(mydata))*365.25)-(DATE() - mydata)) IF d1>0 d2 = d1 ELSE IF d1=0 IF DAY(mydata)=DAY(DATE()) d2=0 ELSE d2=365 ENDIF ELSE d2 = d1+365 ENDIF ENDIF MESSAGEBOX('До моего дня рождения осталось:'+ALLTRIM(STR(d2))+' дней.') ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2009, 22:44 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
Думаю проще всего так :) d = DATE(YEAR(DATE()),MONTH(DATE()),DAY(DATE()))-DATE(YEAR(DATE()),MONTH(plan_sotr.god_rojd),DAY(plan_sotr.god_rojd)) IF d<0 d = d*(-1) thisform.text21.Value = d ELSE thisform.text21.Value = d ENDIF (PS: только вот незнаю как теперь фильтр поставить, таблица называется sotrydnik, имя поля god_rojd. Мне нада только те записи, у которых количество дней до дня рождения не превышает 30. Set filter похоже тут непрокатит, может это всо запихнуть в курсор? Помогите :) ) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2009, 23:52 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
Окончательный вариант оформленный в виде функции SET TALK OFF SET DATE GERMAN SET CENTURY on CLEAR mydata1={^1972.05.17} mydata2=DATE() mydata3={^2009.12.31} mydata4={^2010.01.01} * первый параметр функции dodobday - день рождения * второй необязательный, по умолчанию равен DATE() * ? dodobday() ? DATE(), ' - ', mydata1, dodobday(mydata1) ? ? mydata2, ' - ', mydata1, dodobday(mydata1,mydata2) ? ? {^2009.05.16}, ' - ', mydata1, dodobday(mydata1,{^2009.05.16}) ? ? {^2009.05.17}, ' - ', mydata1, dodobday(mydata1,{^2009.05.17}) ? ? {^2009.05.18}, ' - ', mydata1, dodobday(mydata1,{^2009.05.18}) ? ? mydata3, ' - ', mydata1, dodobday(mydata1,mydata3) ? ? mydata4, ' - ', mydata1, dodobday(mydata1,mydata4) FUNCTION dodobday PARAMETERS d1,d2 PRIVATE d3,d4 IF parameters()<1 MESSAGEBOX('Задайте параметры функции dodobday:'+CHR(10)+CHR(13)+'d1, d2 - две даты') RETURN .f. ENDIF IF parameters()=1 d2=DATE() IF VARTYPE(d1) # 'D' MESSAGEBOX('Задайте параметры функции dodobday:'+CHR(10)+CHR(13)+'d1 - дата') RETURN .f. ENDIF ENDIF IF parameters()=2 IF VARTYPE(d1) # 'D' AND VARTYPE(d2) # 'D' MESSAGEBOX('Задайте параметры функции dodobday:'+CHR(10)+CHR(13)+'d1, d2 - две даты') RETURN .f. ENDIF ENDIF d3= LTRIM(STR(YEAR(d2))) + RIGHT(DTOC(d1,1),4) d3= CTOD('^'+LEFT(d3,4)+'.'+SUBSTR(d3,5,2)+'.'+RIGHT(d3,2)) IF (d3-d2)<0 d3= LTRIM(STR(YEAR(d2)+1)) + RIGHT(DTOC(d1,1),4) d3= CTOD('^'+LEFT(d3,4)+'.'+SUBSTR(d3,5,2)+'.'+RIGHT(d3,2)) ENDIF RETURN d3-d2 ENDFUNC ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2009, 01:08 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
Disaer Так как ты написал нереботает нехера!!! Так сгодится только если у тебя год рождения и текущий год одинаковы. А когда у тебя разница в 20 лет будет, ты никогда число <30 неполучишь. иди проверь если невериш. разница между датами 2009 года и 1988 года примерно равны 7000 дням. А можно печатным языком, или эмоции захлестывают ? ? {^2009-01-01}-{^1988-01-01} возвращает 7671. Под VFP9+SP2. Под WinXP+SP3. У вас не так ? Можно внятно обьяснить, что не устраивает ? "Что ясно представляется, то ясно излагается" (C) Не помню кто. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2009, 01:33 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
rewareDisaer Так как ты написал нереботает нехера!!! Так сгодится только если у тебя год рождения и текущий год одинаковы. А когда у тебя разница в 20 лет будет, ты никогда число <30 неполучишь. иди проверь если невериш. разница между датами 2009 года и 1988 года примерно равны 7000 дням. А можно печатным языком, или эмоции захлестывают ? ? {^2009-01-01}-{^1988-01-01} возвращает 7671. Под VFP9+SP2. Под WinXP+SP3. У вас не так ? Можно внятно обьяснить, что не устраивает ? "Что ясно представляется, то ясно излагается" (C) Не помню кто. Читаем первое сообщение. Там явно сказано что нужно отбирать людей у которых до дня рождения осталось 30 или менее дней. Теперь читаем читаем твой текст: "{^2009-01-01}-{^1988-01-01} возвращает 7671 дней . Помоему 30 и 7671 день сильно отличаются :) 7671 получается из за тго, что ФокПро щитают разницу между датами в днях! Поэтому чтобы выводилась разница в днях, нужно в переменную занести дату рождения человека, предварительно заменив год на текущий. Теперь вам понятно? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2009, 01:50 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
Disaer Читаем первое сообщение. Там явно сказано что нужно отбирать людей у которых до дня рождения осталось 30 или менее дней. Теперь читаем читаем твой текст: "{^2009-01-01}-{^1988-01-01} возвращает 7671 дней . Помоему 30 и 7671 день сильно отличаются :) 7671 получается из за тго, что ФокПро щитают разницу между датами в днях! Поэтому чтобы выводилась разница в днях, нужно в переменную занести дату рождения человека, предварительно заменив год на текущий. Теперь вам понятно? Да мне давно все понятно. Надеюсь, и вам после столь долгих и глубоких рассуждений стало понятно, что проблема не в том, чтобы отфильтровать по количеству оставшихся дней, а в решении огромной технической проблемы - подстановки нужного (текущего) года в дату рождения. Или тред еще на двести мессаг разовьется ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2009, 08:36 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
Лучше помогите теперь выбрать данные из таблицы, либо в новую таблицу, либо в курсор, где сотруднику осталось 30 или менее дней до ДР. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2009, 10:18 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
DisaerЛучше помогите теперь выбрать данные из таблицы, либо в новую таблицу, либо в курсор, где сотруднику осталось 30 или менее дней до ДР. Чего ради страждущего не сделаешь :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2009, 20:59 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
DisaerGoshaS http://www.sql.ru/forum/actualthread.aspx?tid=649550 Ненашол там именно для моего случая примера. Я ту тему два раза читал до того как создал свою. Там промежутки и тд и тп. А мне надо конкретное количество дней до дня рождения. Я недогнал как сделать через промежутки. Читаем постановку задачи по приведенной ссылке Из справочника персонала выбрать всех людей, у которых день рождения на этой неделе, вне зависимости от года Или выражаясь вашими словами должен установиться фильтр отображающий людей у которых до дня рождения осталось менее 7 дней. Читаем вашу постановку задачи должен установиться фильтр отображающий людей у которых до дня рождения осталось менее 30 дней. Т.е. отличие вашей задачи от той, что по ссылке всего лишь в том, что вам надо указать интервал не в 7 дней, а в 30. Решение там приведено. Надо всего-лишь заменить число 7 на число 30. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2009, 22:09 |
|
Количество дней до события
|
|||
---|---|---|---|
#18+
С некоторыми изменениями для подстраховки от високосного года : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.05.2009, 10:32 |
|
|
start [/forum/topic.php?fid=41&msg=35964242&tid=1586498]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 329ms |
total: | 482ms |
0 / 0 |