Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Точная разница между датами / 20 сообщений из 20, страница 1 из 1
13.11.2003, 10:36
    #32322511
-Чайник-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
Помогите пожалуйста, никак не могу сообразить :(
Нужно знать точную разницу между сегодня и датой рождения человека, например: 20 лет 2 месяца и 4 дня
...
Рейтинг: 0 / 0
13.11.2003, 10:37
    #32322512
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
DateDiff
...
Рейтинг: 0 / 0
13.11.2003, 10:39
    #32322518
-Чайник-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
ну он дает разницу в годах точную, и разницу в месяцах за весь период... а как же узнать чколько месяцев от нецелого года и дней от нецелого месяца?
...
Рейтинг: 0 / 0
13.11.2003, 11:11
    #32322598
-Чайник-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
Ну не ужели никто не поможет? :((((
...
Рейтинг: 0 / 0
13.11.2003, 11:35
    #32322640
Daf
Daf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
ну он дает разницу в годах точную, и разницу в месяцах за весь период...
Лох Позорный помоему все правильно написал. DateDiff дает все, что тебе нужно. Надо только выбрать interval тот, который нужен тебе...
...
Рейтинг: 0 / 0
13.11.2003, 11:36
    #32322641
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
Есть Дата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"))
...
Рейтинг: 0 / 0
13.11.2003, 11:36
    #32322643
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
только надо d as integer
...
Рейтинг: 0 / 0
13.11.2003, 11:48
    #32322666
-Чайник-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
Есть Дата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 года прошло...
...
Рейтинг: 0 / 0
13.11.2003, 12:22
    #32322769
Shark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
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
...
Рейтинг: 0 / 0
13.11.2003, 14:22
    #32323039
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
Виноват, я забыл, что 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
...
Рейтинг: 0 / 0
13.11.2003, 15:04
    #32323129
TRoUbLEs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Function nYear(datefirst As Date, datesecond As Date)

If Day(datesecond) - Day(datefirst) +  1  <  0  Then
    If Month(datesecond) - Month(datefirst) -  1  <  0  Then
        nYear = Year(datesecond) - Year(datefirst) -  1 
    Else
        nYear = Year(datesecond) - Year(datefirst)
    End If
Else
    If Month(datesecond) - Month(datefirst) <  0  Then
        nYear = Year(datesecond) - Year(datefirst) -  1 
    Else
        nYear = Year(datesecond) - Year(datefirst)
    End If
End If

End Function


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
If Day(datesecond) - Day(datefirst) +  1  <  0  Then
    If Month(datesecond) - Month(datefirst) -  1  <  0  Then
        nMonth = Month(datesecond) - Month(datefirst) -  1  +  12 
    Else
        nMonth = Month(datesecond) - Month(datefirst) -  1 
    End If
Else
    If Month(datesecond) - Month(datefirst) <  0  Then
        nMonth = Month(datesecond) - Month(datefirst) +  12 
    Else
        nMonth = Month(datesecond) - Month(datefirst)
    End If
End If

End Function


Код: 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.
Function nDay(datefirst As Date, datesecond As Date)

If Day(datesecond) - Day(datefirst) +  1  <  0  Then
    Select Case Month(datesecond)
        Case  2 
            n =  31 
        Case  3 
            If Year(datesecond) /  4  = Int(Year(datesecond) /  4 ) Then
                n =  29 
            Else
                n =  28 
            End If
        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 
    End Select
    nDay = Day(datesecond) - Day(datefirst) +  1  + n
Else
    nDay = Day(datesecond) - Day(datefirst) +  1 
End If

End Function

P.S. Возможно, функции можно и упостить, но я так ygbcfk и не стал дальше выламываться.
P.P.S. Финкции работают только все вместе если применять, т.е. в результате будет 2 года 11 месяцев 23 дня. Если применять по отдельности, то будет только 23 дня или только 11 месяцев. Чтобы узнать полное число месяцев, надо будет кол-во лет умножить на 12 и пибавить 11 или юзать DateDiff.
...
Рейтинг: 0 / 0
13.11.2003, 15:11
    #32323140
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
Млин.
Вот это

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

попробовал - работает.
...
Рейтинг: 0 / 0
13.11.2003, 15:13
    #32323143
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
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
...
Рейтинг: 0 / 0
13.11.2003, 15:26
    #32323175
Shark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
По моему, мой вариант еще немножко короче:-)
...
Рейтинг: 0 / 0
13.11.2003, 15:40
    #32323215
TRoUbLEs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
Млин, Саныч, я же не говорил, что занимаюсь оптимизацией. Надо было срочняком это сделать и что первое полезло в голову, так и сделал. :))
А что касается високосного года, то проверь, все так и есть, как я написал, хотя твой вариант тоже можно использовать.
...
Рейтинг: 0 / 0
13.11.2003, 15:45
    #32323226
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
2 TRoUbLEs:

А чего проверять. 2100, 2200 и 2300 по твоему алгоритму получаются високосные, а они на самом деле нет.
...
Рейтинг: 0 / 0
13.11.2003, 15:55
    #32323242
TRoUbLEs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
Саныч, Саныч, Саныч, стоп!!! Ты где???? Как это не високосные???? Високосный у нас каждый 4-й год, так???? Если так, то 2100 делится на 4 без остатка!! Или я чего-то не знаю про високосные годы??????
...
Рейтинг: 0 / 0
13.11.2003, 16:08
    #32323272
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
Именно. Не знаешь.

Система, по которой из каждых 400 лет только 97 високосных, называется григорианский календарь. Система, по которой 100, - юлианский. Юлианский календарь неточен, по нему средняя длина года отличается от астрономической. Поэтому в начале 20 века весь мир перешел на григорианскую систему. В частности, тот факт, что 7 ноября по "старому стилю" было 25 октября, - это следствие этого перехода.
...
Рейтинг: 0 / 0
13.11.2003, 16:27
    #32323329
TRoUbLEs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
То что есть разделение на юлианский и григорианский - это мне известно. То, что астрономически в сутках на 5 часов с чем-то там минут больше - я тоже знаю (из-за этого и есть високосный год), но вот про 97 високосных годов, сышал впервые. Спасибо за информацию!!!!
...
Рейтинг: 0 / 0
14.11.2003, 20:54
    #32325159
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Точная разница между датами
Формулы для определения високосности года и числа дней в месяце:\r
\r
/topic/57492
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Точная разница между датами / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]