Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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
Показываю на пальцах, следи внимательно:

1. От "21.09.2004" до "21.10.2004" - 1 месяц
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

Попробуй потестируй, функция считает, сколько прошло от меньшей из двух дат до большей.

Function date_difference_to_string(ByVal first_date As Date, ByVal second_date As Date) As String
    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-сайт: starsorion.com
 Профиль | | #45
Добавлено: 22.07.05 22:32
'Нужна ф-ция для счёта даты и время.)'
Hacker поподробнее о проблеме...
У меня есть пример для расчета разницы даты/времени. Для расчета в любом интервале и в нужном формате.

С ув.Alex

Ответить

Страница: 1 | 2 | 3 | 4 | 5 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам