Страница: 1 |
Страница: 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-сайт:
Профиль | | #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
Как работать с
Попробовал так:
Получил ту дату, которую вводил с помощью DateTimePicker.
Что это даёт?
Номер ответа: 6
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #6
Добавлено: 20.04.10 09:57
Наоброт!
в Interval теперь лежит интервал между двумя датами
Номер ответа: 7
Автор ответа:
Arseny
ICQ: 298826769
Вопросов: 53
Ответов: 1732
Профиль | | #7
Добавлено: 23.04.10 14:09
не знаю, как в .net, а на vb6 есть DateDiff:
Syntax
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])