Страница: 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]])