Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: вычисление интервала между датами... Добавлено: 19.04.10 18:02  

Автор вопроса:  DimDoc
Столкнулся с такой проблемой...
Необходимо вычислить возраст человека (ребёнка) в днях и отследить ошибочный ввод даты из будущего.
Вроде бы всё ясно:

    Private Sub ButtonAge_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonAge.Click
        Dim birthday As Date = DateTimePickerBirthday.Value
        Dim dayNow As Date = Now()
        Dim age As Integer
        age = DateDiff(DateInterval.Day, birthday, dayNow)

        Select Case age
            Case Is < 0
                LabelAge.Text = "Ошибка! ребёнок ещё не родился..."
            Case Is = 0
                LabelAge.Text = "С днём рождения! Идут 1-е сутки"
            Case Else
                LabelAge.Text = "Возраст: " & age & " сут."
        End Select

    End Sub


Однако, при вводе следующего дня, за днём рождения - результат функции возвращает тот же 0...
Хотя ожидается результат = -1

Пробовал вводить дату с двух DateTimePicker'ов
история таже, но есть некоторая разница:
 - если выбирать дату только из первого DateTimePicker'а и не трогать второй (по умолчанию отображается текущая дата), повторяется указанная ошибка, т.е. возвращаетя 0 (ноль).
 - если выбирать дату из обоих DateTimePicker'ов, тогда результат ожидаемый, т.е. возвращается -1.

Кто знает в чём тут проблема? Помогите разобраться!

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #1
Добавлено: 19.04.10 18:29
Если вернуло ноль, сравнивай наоборот (поменяй даты местами) Если вернет положительное значение, то ребенок еще не родился.
ИМХО, костыль, но работать должно.

Ответить

Номер ответа: 2
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #2 Добавлено: 19.04.10 19:09
В .NET интервал между датами делается через Date.Subtract(Date)
Возвращается TimeSpan, представляющий собой интервал, из которого можно извлечь все необходимые данные (минуты, секунды, года и т.п.)

Ответить

Номер ответа: 3
Автор ответа:
 DimDoc



Вопросов: 21
Ответов: 104
 Профиль | | #3 Добавлено: 19.04.10 19:22
Спасибо! вечером попробую....

Ответить

Номер ответа: 4
Автор ответа:
 DimDoc



Вопросов: 21
Ответов: 104
 Профиль | | #4 Добавлено: 20.04.10 02:10
Попробовал менять даты местами...
Результат не утешительный - всёравно возвращается ноль!!!

попробовал сделать свой "костыль". Вот что получилось:
в секцию CASE IS = 0 добавил код:

Dim db As Integer = CInt(birthday.Day)
Dim dn As Integer = CInt(dayNow.Day)
   If String.Equals(db, dn) = True Then
      LabelAge.Text = "С днём рождения! Идут 1-е сутки"
   Else
      LabelAge.Text = "Ошибка! ребёнок ещё не родился..."
   End If


Так сработало.

Но меня смущает то, что функция DateDiff возвращает одинаковый результат для двух разных дат...

Ответить

Номер ответа: 5
Автор ответа:
 DimDoc



Вопросов: 21
Ответов: 104
 Профиль | | #5 Добавлено: 20.04.10 02:31
Как работать с
Date.Subtract(Date)
я не понял...
Попробовал так:
  1.  
  2.         Dim test As Date = birthday.Subtract(New TimeSpan(age))
  3.         LabelTest.Text = test.ToString



Получил ту дату, которую вводил с помощью DateTimePicker.
Что это даёт?

Ответить

Номер ответа: 6
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #6 Добавлено: 20.04.10 09:57
Наоброт!

  1. Dim Interval As Timespan = datetime.now.subtract(birthday)

в Interval теперь лежит интервал между двумя датами

Ответить

Номер ответа: 7
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #7 Добавлено: 23.04.10 14:09
не знаю, как в .net, а на vb6 есть DateDiff:
Returns a Variant (Long) specifying the number of time intervals between two specified dates.

Syntax

DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])

Ответить

Страница: 1 |

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



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