Страница: 1 | 2 | 3 | 4 | 5 |
Вопрос: Как считать дату?
Добавлено: 21.07.05 16:39
Автор вопроса: HACKER
Ответы
Всего ответов: 63
Номер ответа: 31
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #31
Добавлено: 22.07.05 17:48
ой муть с этими датами... Я тут нацарапал кое-что, протестируйте плиз...
Private Sub Form_Load()
D$ = "25.08.1988" 'Введите дату
Dim tmpDay As Long
Dim tmpDate As Date
tmpDay = DateDiff("d", Now, D$, vbMonday, vbUseSystem)
tmpDate = DateSerial(0, 0, tmpDay)
dYear = Year(tmpDate) - 2000
dMonth = Month(tmpDate)
dDay = Day(tmpDate)
If tmpDay = 0 Then
dYear = 0: dMonth = 0: dDay = 0
End If
If dYear = -1 And dMonth = 12 And dDay = 31 Then
dYear = 0
dMonth = 1
dDay = 0
End If
If dYear = -1 And dMonth = 12 And dDay > 0 Then
dYear = 0
dMonth = 0
End If
If dYear = -1 And dMonth > 0 And dDay > 0 Then
dYear = 0
dMonth = 0
dDay = Abs(tmpDay)
End If
If dDay < 0 Then
dYear = dYear + 1
dMonth = 12 - dMonth - 2
End If
If dDay = 31 Then
dMonth = dMonth + 1
dDay = 0
End If
MsgBox "Вы ввели: " & D$ & vbNewLine & "Текущая: " & Date & vbNewLine & "Разница между датами: " & Format(dDay, "00" & "." _
& Format(dMonth, "00" & "." & Format(Abs(dYear), "0000", vbInformation, "год.месяц.день"
End
End Sub
Номер ответа: 32
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #32
Добавлено: 22.07.05 17:50
На вид вроде считает, почему не сходится с примером Age от CyRax'a незнаю. Точнее знаю, кто-то из нас не правильно считал , вопрос вот кто?
Номер ответа: 33
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #33
Добавлено: 22.07.05 17:54
блин!!!! Безобразие, моя говорит что мне 17, а мне только 16 ((((( Слыш, LOL, может вместо
dYear = Year(tmpDate) - 2000
надо
dYear = Year(tmpDate) - 1999
Покрайнемере мне так хоть 16 будет ))))))
Номер ответа: 34
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #34
Добавлено: 22.07.05 17:55
Во блин. Я ж написал в последних постах как убрать глюк нулевого месяца. Нафиг эти if не нужны. Только проверяй чтобы эти две даты не совпадали - не то лабуда будет. А так вроде все остальное считает верно, не по принципу HOOLIGAN'а
Номер ответа: 35
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #35
Добавлено: 22.07.05 17:55
Показываю на пальцах, следи внимательно:
2. От "21.09.2004" до "21.11.2004" - 2 месяца
3. От "21.09.2004" до "21.12.2004" - 3 месяца
4. От "21.09.2004" до "21.01.2005" - 4 месяца
5. От "21.09.2004" до "21.02.2005" - 5 месяца
6. От "21.09.2004" до "21.03.2005" - 6 месяцев
7. От "21.09.2004" до "21.04.2005" - 7 месяцев
8. От "21.09.2004" до "21.05.2005" - 8 месяцев
9. От "21.09.2004" до "21.06.2005" - 9 месяцев
10. От "21.09.2004" до "21.07.2005" - 10 месяцев
Десять полных месяцев от "21.09.2004" до "21.07.2005"
Плюс один день от "21.07.2005" до "22.07.2005"
Имеем: 10 месяцев и один день.
А не 9 месяцев 29 дней.
Теперь понятно?
Номер ответа: 36
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #36
Добавлено: 22.07.05 17:56
Какие даты сравнивал?
Номер ответа: 37
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #37
Добавлено: 22.07.05 17:58
2HOOLIGAN, я уже спрашивал - откуда эти цифры? Откуда 10 месяцев и 1 день? Пояснить можешь. Ты по календарю считал?
Номер ответа: 38
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #38
Добавлено: 22.07.05 17:58
2HACKER, ты уже постарел с этой функцией.. спроси Эксель сколько правильно
Номер ответа: 39
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #39
Добавлено: 22.07.05 17:59
Тут дело в том, как считать
Я принимаю за первую дату, от которой идёт отсчёт, ту дату, которая меньше. Исходя из того, что время вспять не идёт.
Если считать задом наперёд, то результат будет другой.
Поэтому HACKER, ты определись, чего тебе надо, сколько прошло между двумя датами, или сколько времени назад была некая дата.
Номер ответа: 40
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #40
Добавлено: 22.07.05 18:00
Ладно, день кончился, в понедельник разберемся че не так
Номер ответа: 41
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #41
Добавлено: 22.07.05 18:09
LamerOnLine
То, что я тебе расписал, даже проще, чем в календаре, а ты не видишь
Тут тебе календарь тем более не поможет
А тем более в понедельник, который как известно, тяжёлый день.
Номер ответа: 42
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #42
Добавлено: 22.07.05 18:15
Да вижу я, просто видать уже совсем перегрелся )
Ладно, подумаю еще. С DateSerial будет непросто, там все от года зависит, хотя почему потеря ДВУХ дней идет - непонятно. Придется, видимо, самому парсить. Ладно, время вышло
Номер ответа: 43
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #43
Добавлено: 22.07.05 18:59
HACKER
Попробуй потестируй, функция считает, сколько прошло от меньшей из двух дат до большей.
Dim AD As Date
d = DateDiff("d", first_date, second_date)
If d < 0 Then
AD = first_date
first_date = second_date
second_date = AD
d = DateDiff("d", first_date, second_date)
End If
y = DateDiff("yyyy", first_date, second_date)
first_date = DateAdd("yyyy", y, first_date)
Do While DateDiff("d", first_date, second_date) < 0
first_date = DateAdd("yyyy", -1, first_date)
y = y - 1
Loop
m = DateDiff("m", first_date, second_date)
first_date = DateAdd("m", m, first_date)
Do While DateDiff("d", first_date, second_date) < 0
first_date = DateAdd("m", -1, first_date)
m = m - 1
If m < 0 Then
first_date = DateAdd("m", 11, first_date)
first_date = DateAdd("y", -1, first_date)
End If
Loop
d = DateDiff("d", first_date, second_date)
date_difference_to_string = "Years: " & y & ", month: " & m & ", days: " & d
Debug.Print y
Debug.Print m
Debug.Print d
End Function
Private Sub Form_Load()
Debug.Print date_difference_to_string("02.03.2000", "01.02.2006"
End Sub
Номер ответа: 44
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #44
Добавлено: 22.07.05 20:31
о! Хулиган!!! Вроде эта воркует ...
Номер ответа: 45
Автор ответа:
Alexandrus
ICQ: 496782368
Вопросов: 18
Ответов: 312
Web-сайт:
Профиль | | #45
Добавлено: 22.07.05 22:32
'Нужна ф-ция для счёта даты и время.)'
Hacker поподробнее о проблеме...
У меня есть пример для расчета разницы даты/времени. Для расчета в любом интервале и в нужном формате.
С ув.Alex