|
|
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
Помогите пожалуйста, никак не могу сообразить :( Нужно знать точную разницу между сегодня и датой рождения человека, например: 20 лет 2 месяца и 4 дня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 10:36 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
DateDiff ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 10:37 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
ну он дает разницу в годах точную, и разницу в месяцах за весь период... а как же узнать чколько месяцев от нецелого года и дней от нецелого месяца? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 10:39 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
Ну не ужели никто не поможет? :(((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 11:11 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
ну он дает разницу в годах точную, и разницу в месяцах за весь период... Лох Позорный помоему все правильно написал. DateDiff дает все, что тебе нужно. Надо только выбрать interval тот, который нужен тебе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 11:35 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
Есть Дата1 и Дата2. Условие: Дата1<=Дата2. dim y as integer, m as byte, d as byte y=datediff("y",Дата1,Дата2) m=cbyte(datediff("m",Дата1,Дата2)-y*12) d=cbyte(format(Дата2,"dd"))-cbyte(format(Дата1,"dd")) if d<0 then d=d+cbyte(format(dateserial(year(Дата2),Month(Дата2)-1,1)-1,"dd")) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 11:36 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
только надо d as integer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 11:36 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
Есть Дата1 и Дата2. Условие: Дата1<=Дата2. dim y as integer, m as byte, d as byte y=datediff("y",Дата1,Дата2) m=cbyte(datediff("m",Дата1,Дата2)-y*12) d=cbyte(format(Дата2,"dd"))-cbyte(format(Дата1,"dd")) if d<0 then d=d+cbyte(format(dateserial(year(Дата2),Month(Дата2)-1,1)-1,"dd")) только вот если месяц у Даты1> месяца у Даты2, то год все рано целым считается... declare @date datetime, @y as int set @date = convert(datetime,'13.12.2000',104) set @y=datediff(yy, @date, getdate()) print @y ------ 3 а на самом деле-то 2 года прошло... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 11:48 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
Function fn1() Dim lMonth, ldate1, ldate2, lday ldate1 = #1/2/1966# ldate2 = #1/1/2003# lMonth = DateDiff("m", ldate1, ldate2) If Day(ldate1) > Day(ldate2) Then lMonth = lMonth - 1 ldate1 = DateAdd("m", lMonth, ldate1) lday = DateDiff("d", ldate1, ldate2) Dim lYear lYear = lMonth \ 12 lMonth = lMonth Mod 12 Debug.Print lYear, lMonth, lday End Function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 12:22 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
Виноват, я забыл, что datediff работает так. Тогда вот еще вариант. (Тоже не пробовал :) dim y as integer, m as integer, d as integer y=year(Дата2)-year(Дата1) m=month(Дата2)-month(Дата1) if m<0 then m=m+12: y=y-1 d=day(Дата2,"dd")-day(Дата1) if d<0 then d=d+day(dateserial(year(Дата2),Month(Дата2)-1,1)-1): m=m-1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 14:22 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Код: 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. P.S. Возможно, функции можно и упостить, но я так ygbcfk и не стал дальше выламываться. P.P.S. Финкции работают только все вместе если применять, т.е. в результате будет 2 года 11 месяцев 23 дня. Если применять по отдельности, то будет только 23 дня или только 11 месяцев. Чтобы узнать полное число месяцев, надо будет кол-во лет умножить на 12 и пибавить 11 или юзать DateDiff. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 15:04 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
Млин. Вот это Function aaa(Дата1 As Date, Дата2 As Date) Dim y As Integer, m As Integer, d As Integer y = Year(Дата2) - Year(Дата1) m = Month(Дата2) - Month(Дата1) If m < 0 Then m = m + 12: y = y - 1 d = Day(Дата2) - Day(Дата1) If d < 0 Then d = d + Day(DateSerial(Year(Дата2), Month(Дата2) - 1, 1) - 1) m = m - 1 If m = -1 Then m = 11: y = y - 1 endif Debug.Print d & "-" & m & "-" & y End Function попробовал - работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 15:11 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
TRoUbLEs писал: Case 3 If Year(datesecond) / 4 = Int(Year(datesecond) / 4) Then n = 29 Else n = 28 End If Это неверно. Год является високосным, если: (Y mod 4 = 0 and Y mod 100 > 0) or Y mod 400 = 0 TRoUbLEs писал: Case 2 n = 31 Case 4 n = 31 Case 5 n = 30 Case 6 n = 31 Case 7 n = 30 Case 8 n = 31 Case 9 n = 31 Case 10 n = 30 Case 11 n = 31 Case 12 n = 30 Case 1 n = 31 А это гораздо короче так: Case 5, 7, 9, 10, 12 n = 30 Case Else n = 31 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 15:13 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
По моему, мой вариант еще немножко короче:-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 15:26 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
Млин, Саныч, я же не говорил, что занимаюсь оптимизацией. Надо было срочняком это сделать и что первое полезло в голову, так и сделал. :)) А что касается високосного года, то проверь, все так и есть, как я написал, хотя твой вариант тоже можно использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 15:40 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
2 TRoUbLEs: А чего проверять. 2100, 2200 и 2300 по твоему алгоритму получаются високосные, а они на самом деле нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 15:45 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
Саныч, Саныч, Саныч, стоп!!! Ты где???? Как это не високосные???? Високосный у нас каждый 4-й год, так???? Если так, то 2100 делится на 4 без остатка!! Или я чего-то не знаю про високосные годы?????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 15:55 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
Именно. Не знаешь. Система, по которой из каждых 400 лет только 97 високосных, называется григорианский календарь. Система, по которой 100, - юлианский. Юлианский календарь неточен, по нему средняя длина года отличается от астрономической. Поэтому в начале 20 века весь мир перешел на григорианскую систему. В частности, тот факт, что 7 ноября по "старому стилю" было 25 октября, - это следствие этого перехода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 16:08 |
|
||
|
Точная разница между датами
|
|||
|---|---|---|---|
|
#18+
То что есть разделение на юлианский и григорианский - это мне известно. То, что астрономически в сутках на 5 часов с чем-то там минут больше - я тоже знаю (из-за этого и есть високосный год), но вот про 97 високосных годов, сышал впервые. Спасибо за информацию!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2003, 16:27 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32323272&tid=1678236]: |
0ms |
get settings: |
9ms |
get forum list: |
36ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
173ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 229ms |
| total: | 534ms |

| 0 / 0 |
