|
Определение возраста
|
|||
---|---|---|---|
#18+
Люди помогите плизз недавно начал программировать на VFP есть ли функция определение возраста ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 10:38 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
Такой функции нет. В хелпе найдите функции для работы с датами и через них. З.Ы. Само по себе вычисление возраста - задача нетривиальная. З.З.Ы . Как вариант, смотрите по ссылке http://forum.foxclub.ru/read.php?32,177182,321849#msg-321849 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 10:47 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
homik, Да я это уже понял, перерыл все что можно, может у кого есть готовая функция!!! Заранее СПАСИБО!!!!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 11:01 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
Евгений1111homik, Да я это уже понял, перерыл все что можно, может у кого есть готовая функция!!! Готовая для кого? Вам же дали ссылку на статью, в которой достаточно ясно расписывается проблема расчета разницы дат. Вы ее прочитали? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 11:24 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
[/quot]Готовая для кого? Вам же дали ссылку на статью, в которой достаточно ясно расписывается проблема расчета разницы дат. Вы ее прочитали?[/quot] да в том то и дело что прочитал и не чего существенного там нет, я и сам могу написать только это куча проверок надо делать, может уже кто то с этим сталкивался и поможет избежать некоторых проблем ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 11:30 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
Евгений1111Готовая для кого? Вам же дали ссылку на статью, в которой достаточно ясно расписывается проблема расчета разницы дат. Вы ее прочитали?[/quot] да в том то и дело что прочитал и не чего существенного там нет, я и сам могу написать только это куча проверок надо делать, может уже кто то с этим сталкивался и поможет избежать некоторых проблем[/quot]Да этим сталкивались все, кто хоть каким-то боком связан с зарплатой, ЖКХ и т.д. Но у всех разные правила расчета. И потому каждый пишет для себя. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 11:33 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
проходящий.Евгений1111Готовая для кого? Вам же дали ссылку на статью, в которой достаточно ясно расписывается проблема расчета разницы дат. Вы ее прочитали? да в том то и дело что прочитал и не чего существенного там нет, я и сам могу написать только это куча проверок надо делать, может уже кто то с этим сталкивался и поможет избежать некоторых проблем[/quot]Да этим сталкивались все, кто хоть каким-то боком связан с зарплатой, ЖКХ и т.д. Но у всех разные правила расчета. И потому каждый пишет для себя.[/quot] да я это понимаю, есть ли у кого готовый код очень хотелось бы посмотреть, просто в фоксе я чайник ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 11:39 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
Ну раз хотите без кучи проверок и готовый пример то : ldBirthDay = {^1972-02-01} Age=Date()-ldBirthDay ? Age/365 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 11:57 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
Ну или так, более наглядно : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Тут надо более точнее определиться с коэф.-ми 365.2 и 29.7 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 12:17 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
или так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 12:20 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
homik Тут надо более точнее определиться с коэф.-ми 365.2 и 29.7 Коэффициент 365.2 означает, что у вас один високосный год каждые пять лет (включительно). В реальной ситуации, у нас один високосный год на каждые четыре года (включительно). То-есть, коэффициент должен быть 365.25. Ограничение на этот коэффициент, такое: дата должна быть в пределах 01.03.1900 и 28.02.2100. Дело в том, что 1900 и 2100 годы - невисокосные. С месяцами хуже. Коэффициента недостаточно. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 12:27 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
homikили так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
спасибо только вот если месяц будет не 01 а больше сегодняшнего напр. 11 то месяц получается отрицательное и неправильное значение ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 12:32 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
авторНу раз хотите без кучи проверок и готовый пример то : А это для чего я написал ? Напильник в руки и "алга" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 12:46 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
homikавторНу раз хотите без кучи проверок и готовый пример то : А это для чего я написал ? Напильник в руки и "алга" :) спасибо, сейчас сделаю ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 12:55 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
Евгений1111homikавторНу раз хотите без кучи проверок и готовый пример то : А это для чего я написал ? Напильник в руки и "алга" :) спасибо, сейчас сделаю вот что получилось ldBirthDay = {^2008-06-29} Age=Date()-ldBirthDay lnFlowYear=Age/365.2 lnYears=INT(lnFlowYear) lnMonth=Floor((lnFlowYear-lnYears)*12) IF lnMonth<0 THEN lnMonth=lnMonth+12 ENDIF lnDay=Ceiling(((lnFlowYear-lnYears)*12-lnMonth)*29.7) ? ? lnFlowYear ? lnYears," лет",lnMonth," Месяцев",lnDay," дней" ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 14:22 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
Евгений1111 вот что получилось Хренова получилось. Погрешность: 5 дней за 100 лет. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Поправьте константы, как-минимум. 2001200220032004Среднееянварь3131313131февраль2828282928.25март3131313131апрель3030303030май3131313131июнь3030303030июль3131313131август3131313131сентябрь3030303030октябрь3131313131ноябрь3030303030декабрь3131313131дней в году365365365366365.25дней в месяце30.4166666730.4166666730.4166666730.530.4375 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 14:52 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
А лучше всего вот так ldBirthDay = {^2009-02-24} lnYears=YEAR(DATE())-year(ldBirthDay) lnMonth=MONTH(DATE())-MONTH(ldBirthDay) IF lnMonth<0 THEN lnMonth=lnMonth+12 ENDIF y=31 f=28 m=31 a=30 _m=31 i=30 _i=31 _a=31 s=30 o=31 n=30 d=31 p=DAY(ldBirthDay) l=DAY(DATE()) m1=l-p IF m1>=0 then lnDay=m1 ENDIF IF m1<0 then lnMonth=lnMonth-1 DO CASE CASE MONTH(ldBirthDay)=1 lnDay=y-p+l CASE MONTH(ldBirthDay)=2 IF MOD(YEAR(ldBirthDay),4)=0 then lnDay=f+1-p+l ELSE lnDay=f-p+l ENDIf CASE MONTH(ldBirthDay)=3 lnDay=m-p+l CASE MONTH(ldBirthDay)=4 lnDay=a-p+l CASE MONTH(ldBirthDay)=5 lnDay=_m-p+l CASE MONTH(ldBirthDay)=6 lnDay=i-p+l CASE MONTH(ldBirthDay)=7 lnDay=_i-p+l CASE MONTH(ldBirthDay)=8 lnDay=_a-p+l CASE MONTH(ldBirthDay)=9 lnDay=s-p+l CASE MONTH(ldBirthDay)=10 lnDay=o-p+l CASE MONTH(ldBirthDay)=11 lnDay=n-p+l CASE MONTH(ldBirthDay)=12 lnDay=d-p+l ENDCASE endif ? lnYears," лет",lnMonth," месяцев",lnDay," дней" ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 15:12 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
Ну вот непруха. Не хотел человек проверок. А ему навязывают и навязывают. Непорядок, однако :) :) :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 15:16 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
homikНу вот непруха. Не хотел человек проверок. А ему навязывают и навязывают. Непорядок, однако :) :) :) да нет я не то чтобы не хотел проверок, я не хотел их думать и писать, думал может у кого похожее есть- посмотреть чтобы не заморачиваться но все равно пришлось самому всем спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 15:28 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
ой строчку одну пропустил!!!!! ldBirthDay = {^2008-11-23} lnYears=YEAR(DATE())-year(ldBirthDay) lnMonth=MONTH(DATE())-MONTH(ldBirthDay) IF lnMonth<0 THEN lnMonth=lnMonth+12 lnYears=lnYears-1 ENDIF y=31 f=28 m=31 a=30 _m=31 i=30 _i=31 _a=31 s=30 o=31 n=30 d=31 p=DAY(ldBirthDay) l=DAY(DATE()) m1=l-p IF m1>=0 then lnDay=m1 ENDIF IF m1<0 then lnMonth=lnMonth-1 DO CASE CASE MONTH(ldBirthDay)=1 lnDay=y-p+l CASE MONTH(ldBirthDay)=2 IF MOD(YEAR(ldBirthDay),4)=0 then lnDay=f+1-p+l ELSE lnDay=f-p+l ENDIf CASE MONTH(ldBirthDay)=3 lnDay=m-p+l CASE MONTH(ldBirthDay)=4 lnDay=a-p+l CASE MONTH(ldBirthDay)=5 lnDay=_m-p+l CASE MONTH(ldBirthDay)=6 lnDay=i-p+l CASE MONTH(ldBirthDay)=7 lnDay=_i-p+l CASE MONTH(ldBirthDay)=8 lnDay=_a-p+l CASE MONTH(ldBirthDay)=9 lnDay=s-p+l CASE MONTH(ldBirthDay)=10 lnDay=o-p+l CASE MONTH(ldBirthDay)=11 lnDay=n-p+l CASE MONTH(ldBirthDay)=12 lnDay=d-p+l ENDCASE endif ? lnYears," лет",lnMonth," месяцев",lnDay," дней" ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 15:33 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
Replace Year With Max(Year(Date()) - Year(Nvl(Birthday,{})) - IIF(Month(Nvl(Birthday,{}))*100+Day(Nvl(Birthday,{})) > Month(Date())*100+Day(Date()),1,0),0) For !Empty(Nvl(Birthday,{})) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 16:08 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
George1974Replace Year With Max(Year(Date()) - Year(Nvl(Birthday,{})) - IIF(Month(Nvl(Birthday,{}))*100+Day(Nvl(Birthday,{})) > Month(Date())*100+Day(Date()),1,0),0) For !Empty(Nvl(Birthday,{})) и что это значит, что то я не как не пойму!!!!!!! что то она не работает!!!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2009, 16:43 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
FUNCTION Year_month LPARAMETER tdDate_inp, tdDate_out LOCAL lcReturn, ldSs, ldDate_flow, lnYear, lnMonth, lcYear, lcMonth lcReturn = '' IF tdDate_inp != CTOD("00.00.0000") AND tdDate_out != CTOD("00.00.0000") ldSs = tdDate_inp ldDate_flow = ldSs lnYear = 0 ldSs = GOMONTH(ldSs,12) DO WHILE( ldSs <= tdDate_out ) ldDate_flow = ldSs ldSs = GOMONTH(ldSs,12) lnYear = lnYear + 1 ENDDO IF lnYear = 0 OR ldSs > tdDate_out ldSs = ldDate_flow lnMonth = 0 DO WHILE( ldSs <= tdDate_out ) ldDate_flow = ldSs ldSs = GOMONTH(ldSs,1) lnMonth = lnMonth + 1 ENDDO ENDIF lnMonth = lnMonth - 1 IF lnYear != 0 IF lnYear >= 10 lcReturn = STR(lnYear,3) ELSE lcReturn = STRTRAN(STR(lnYear,3),'0',' ') ENDIF DO CASE CASE SUBSTR(STR(lnYear,3),2,1) = '1' OR SUBSTR(STR(lnYear,3),3,1) = '0' lcYear = ' лет ' CASE SUBSTR(STR(lnYear,3),3,1) = '1' lcYear = ' год ' CASE SUBSTR(STR(lnYear,3),3,1) = '0' OR ; SUBSTR(STR(lnYear,3),3,1) = '5' OR ; SUBSTR(STR(lnYear,3),3,1) = '6' OR ; SUBSTR(STR(lnYear,3),3,1) = '7' OR ; SUBSTR(STR(lnYear,3),3,1) = '8' OR ; SUBSTR(STR(lnYear,3),3,1) = '9' lcYear = ' лет ' CASE SUBSTR(STR(lnYear,3),3,1) = '2' OR ; SUBSTR(STR(lnYear,3),3,1) = '3' OR ; SUBSTR(STR(lnYear,3),3,1) = '4' lcYear = ' года ' ENDCASE lcReturn = lcReturn + lcYear ENDIF IF lnMonth != 0 IF lnMonth >= 10 lcReturn = lcReturn + STR(lnMonth,2) ELSE lcReturn = lcReturn + STRTRAN(STR(lnMonth,2),'0',' ') ENDIF DO CASE CASE SUBSTR(STR(lnMonth,2),2,1) = '1' lcMonth = ' месяц' CASE SUBSTR(STR(lnMonth,2),2,1) = '0' OR ; SUBSTR(STR(lnMonth,2),2,1) = '5' OR ; SUBSTR(STR(lnMonth,2),2,1) = '6' OR ; SUBSTR(STR(lnMonth,2),2,1) = '7' OR ; SUBSTR(STR(lnMonth,2),2,1) = '8' OR ; SUBSTR(STR(lnMonth,2),2,1) = '9' lcMonth = ' месяцев' CASE SUBSTR(STR(lnMonth,2),2,1) = '2' OR ; SUBSTR(STR(lnMonth,2),2,1) = '3' OR ; SUBSTR(STR(lnMonth,2),2,1) = '4' lcMonth = ' месяца' ENDCASE lcReturn = lcReturn + lcMonth ENDIF ENDIF IF lnYear = 0 AND lnMonth = 0 lcReturn = '( Возраст: меньше месяца )' ELSE lcReturn = '( Возраст: ' + lcReturn + ' )' ENDIF RETURN lcReturn ENDFUNC **************************************** ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2009, 06:11 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
Евгений1111George1974Replace Year With Max(Year(Date()) - Year(Nvl(Birthday,{})) - IIF(Month(Nvl(Birthday,{}))*100+Day(Nvl(Birthday,{})) > Month(Date())*100+Day(Date()),1,0),0) For !Empty(Nvl(Birthday,{})) и что это значит, что то я не как не пойму!!!!!!! что то она не работает!!!!! Данный код заполнял в таблице поле Year - количество полных лет (т.к. возраст все таки считают в целых годах а не в годах, месяцах, днях, часах, минутах и секундах) в зависимости от даты рождения - Birthday Попробуй так: Birthday = {^1974-01-30} If !Empty(Nvl(Birthday,{})) Year = Max(Year(Date()) - Year(Nvl(Birthday,{})) - IIF(Month(Nvl(Birthday,{}))*100+Day(Nvl(Birthday,{})) > Month(Date())*100+Day(Date()),1,0),0) EndIf ?Year ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2009, 12:10 |
|
Определение возраста
|
|||
---|---|---|---|
#18+
Вот мой вариант :-) Код: plaintext 1.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2009, 15:52 |
|
|
start [/forum/topic.php?fid=41&msg=36106008&tid=1583157]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 160ms |
0 / 0 |