Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
2 / 2 / 1
Регистрация: 26.02.2015
Сообщений: 25
1
.NET 4.x

Вычисление возраста человека. Калькулятор дат

26.02.2015, 21:56. Показов 3290. Ответов 13
Метки нет (Все метки)

Сколько б я не гуглил, сколько б не искал, всё равно не смог найти какой же код нужно написать, чтобы создать программу по вычислению возраста. По задумке на форме одна кнопка, один большой TextBox4 и 3 маленьких. В TextBox4 вводится дата, нажимается кнопочка и разница между настоящей датой и введёной заносится в три маленьких текстбокса (TextBox1 - кол-во лет, TextBox2 - кол-во месяцев, TextBox3 - кол-во дней).

Т.е. если у нас, допустим, введена дата 15.08.2012 и она вычитается из сегодняшней 26.02.2015, тогда в TextBox1 = "2", TextBox2 = "6", TextBox3 = "11"

Изменения лейболов (лет, месяцев, дней) в зависимости от цифр я сделал, а вот как вычислить дату.... =(
Помогите пожалуйста
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.02.2015, 21:56
Ответы с готовыми решениями:

Вычисление возраста сотрудника и расчёт среднего возраста
Народ ПОМОГИТЕ пожалуйста!!! В Access не силён (на уровне пользователя). Имеется база данных с...

Расчет возраста человека
Как рассчитать возраст человека? Не тупо отнимая дату от даты? DateDiff не работает (Informix-sql)

Расчет возраста человека
Дана дата рождения человека. Нужно вывести на экран возраст человека (точнее, количество полных лет)

Программа для возраста человека
Известен год и номер месяця рождения человека определит возраст на матрт 2012

13
38 / 38 / 17
Регистрация: 04.03.2014
Сообщений: 200
26.02.2015, 23:42 2
vb.net
1
2
3
4
5
6
7
8
9
10
Public Class Form1
    
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = MonthCalendar1.SelectionStart
        TextBox2.Text = DateDiff("D", Now, CDate(TextBox1.Text))
        TextBox3.Text = DateDiff("YYYY", Now, CDate(TextBox1.Text))
        TextBox4.Text = DateDiff("M", Now, CDate(TextBox1.Text))
    End Sub
 
End Class
четыре TextBox
один MonthCalendar
один Button
Через MonthCalendar вставляешь дату нажимаешь на кнопку и и в TextBox_ах получаешь результат.

Добавлено через 51 минуту
vb.net
1
2
3
4
5
6
7
8
9
10
Public Class Form1
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 
        TextBox2.Text = DateDiff("D", Now, CDate(TextBox1.Text))
        TextBox3.Text = DateDiff("YYYY", Now, CDate(TextBox1.Text))
        TextBox4.Text = DateDiff("M", Now, CDate(TextBox1.Text))
    End Sub
 
End Class
Или без MonthCalendar и писать дату вручную.
1
2 / 2 / 1
Регистрация: 26.02.2015
Сообщений: 25
27.02.2015, 00:09  [ТС] 3
Если бы всё было так просто... Функция вычисляет разницу дат днях, месяцах и годах вне зависимости друг от друга. Но как сделать, чтобы получился такой результат: 2 года, 6 месяцев 11 дней. Точнее уже будет 12
1
Изображения
 
38 / 38 / 17
Регистрация: 04.03.2014
Сообщений: 200
27.02.2015, 00:47 4
koffe09,
vb.net
1
2
3
4
5
6
7
8
9
10
11
Public Class Form1
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 
 
        TextBox2.Text = DateDiff("YYYY", Now, CDate(TextBox1.Text)) * -1
        TextBox3.Text = Date.Now.Month
        TextBox4.Text = Date.Now.Day
    End Sub
 
End Class
Тогда так.

Добавлено через 9 минут
koffe09,
Нет, так не правильно. Завтра на свежую голову.
Так будет, если в этом году День рождения уже был.
0
26 / 26 / 9
Регистрация: 19.08.2014
Сообщений: 75
27.02.2015, 13:39 5
Лучший ответ Сообщение было отмечено koffe09 как решение

Решение

Вот как-то так получилось.

vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        Dim InputDate As Date = CDate(TextBox1.Text) 'Введенная дата
        Dim NowDate As Date = Now 'Сегодняшняя дата (или дата до которой считать)
        Dim TmpDate As Date 'Доп. переменная для вычислений
 
        Dim Days As Integer 'Дней прошло
        Dim Months As Integer 'Месяцев прошло
        Dim Years As Integer 'Лет прошло
 
        Years = DateDiff("YYYY", InputDate, NowDate)
        If InputDate.Month = NowDate.Month And InputDate.Day > NowDate.Day Or InputDate.Month > NowDate.Month Then Years -= 1
 
        Months = DateDiff("M", InputDate, NowDate) - Years * 12
 
        If InputDate.Day > NowDate.Day Then Months -= 1
 
        TmpDate = InputDate.AddMonths(Months)
        TmpDate = TmpDate.AddYears(Years)
 
        Days = DateDiff("D", TmpDate, NowDate)
 
        TextBox2.Text = Years
        TextBox3.Text = Months
        TextBox4.Text = Days
Добавлено через 28 минут
1
38 / 38 / 17
Регистрация: 04.03.2014
Сообщений: 200
27.02.2015, 14:48 6
koffe09,
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Class Form1
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim m1, m2, g1, g2, m3, g3, d1, d2, d3 As String
        Dim str As String = TextBox1.Text
        m1 = Date.Now.Month ' Проверяем текущий месяц
        g1 = Date.Now.Year ' Проверяем текущий год
        d1 = Date.Now.Day  ' Проверяем текущий день
        d2 = str.Substring(0, 2)   ' День рождения
        m2 = str.Substring(3, 2)   ' Месяц рождения
        g2 = str.Substring(6, 4)   ' Год рождения
        g3 = g1 - g2
        m3 = m1 - m2
        d3 = d1 - d2
        If m3 < 0 Then g3 = g3 - 1 : m3 = m3 + 12
        TextBox2.Text = g3   ' лет
        TextBox3.Text = m3   ' месяцев
        TextBox4.Text = d3   ' дней
    End Sub
 
End Class
Вот, этот код работает.
0
26 / 26 / 9
Регистрация: 19.08.2014
Сообщений: 75
27.02.2015, 15:09 7
Цитата Сообщение от vasiliw8 Посмотреть сообщение
Вот, этот код работает.
А если ввести дату 30.01.2015? С днями просто так не получится вычитать. Нужно учитывать, что в месяцах разное количество дней.

Например, между 30.06 и 01.07 один день разницы, а между 30.07 и 01.08 два дня.
0
38 / 38 / 17
Регистрация: 04.03.2014
Сообщений: 200
27.02.2015, 16:41 8
TigerHawk,
Значит надо через Select Case ввести поправку по месяцам.
1
26 / 26 / 9
Регистрация: 19.08.2014
Сообщений: 75
27.02.2015, 20:33 9
Цитата Сообщение от vasiliw8 Посмотреть сообщение
Значит надо через Select Case ввести поправку по месяцам.
Можно, если есть желание, но уж больно заморочено получится. Еще надо учесть, что в феврале может быть 28 и 29 дней.
0
COM‐пропагандист
515 / 445 / 105
Регистрация: 18.12.2014
Сообщений: 1,149
Записей в блоге: 2
27.02.2015, 21:53 10
Можно же проще. Добавить элемент управления выбора даты DateTimePicker.
vb.net
1
2
3
4
5
6
' Выбранная дата
Dim Date1 As Date = DateTimePicker1.Value
' Текущая дата
Dim Date2 As Date = Date.Now
' Вычисляем разницу и преобразовываем значение к типу Date
Dim Date3 As Date = Date.FromBinary(Date2.Subtract(Date1).Ticks)
Теперь в Date3 содержится разница между двумя датами. Можно использовать все свойства, такие как Date3.Year, Date3.Month и Date3.Day.
0
26 / 26 / 9
Регистрация: 19.08.2014
Сообщений: 75
01.03.2015, 20:55 11
Цитата Сообщение от Замабувараев Посмотреть сообщение
Теперь в Date3 содержится разница между двумя датами. Можно использовать все свойства, такие как Date3.Year, Date3.Month и Date3.Day.
Только еще надо из каждого свойства вычитать 1. Но и тут возможны ошибки.
Между датами: 23.11.2013 и 22.01.2014 получается 2 месяца и один день при таком способе вычисления. Хотя прошло меньше двух месяцев. Можно и другие варианты дат найти, когда будет ошибка возникать. Все дело в том, что между двумя датами может пройти 2 месяца и 30 дней, а вот даты 30 февраля быть не может.
0
COM‐пропагандист
515 / 445 / 105
Регистрация: 18.12.2014
Сообщений: 1,149
Записей в блоге: 2
02.03.2015, 14:16 12
TigerHawk, Между 23.11.2013 и 22.01.2014 шестьдесят один день, это как раз два месяца и один день. Всё правильно программа считает.
0
26 / 26 / 9
Регистрация: 19.08.2014
Сообщений: 75
02.03.2015, 16:34 13
Замабувараев, почему 61 день это 2 месяца и один день? Декабрь и январь это 2 месяца, но дней 62. Январь и февраль тоже 2 месяца, а дней 59 (в этом году).

Берем дату 1 января. Ровно через месяц какая будет дата? 31 января или 1 февраля?

Добавлено через 18 минут
p.s. Даже проще все... Берем тот же DateTimePicker, выбираем дату 23.11.2013. Прибавляем к ней 2 месяца и один день, что получится? Кстати, между этими датам 60 дней, а не 61. Ну даже если просто 2 месяца прибавить, к 23.11.2013, не получится 22.01.2014.
0
COM‐пропагандист
515 / 445 / 105
Регистрация: 18.12.2014
Сообщений: 1,149
Записей в блоге: 2
02.03.2015, 18:00 14
Мой подход был с преобразованием типа TimeSpan к типу Date был неверным. Ничего не нужно преобразовывать.
vb.net
1
2
3
4
5
6
7
' Выбранная дата
Dim date1 As Date = #11/23/2013 1:00:00AM#
' Текущая дата
Dim Date2 As Date = #01/22/2014 1:00:00AM#
' Вычитаем
Dim Date3 As TimeSpan = Date2.Subtract(Date1)
Console.WriteLine(date3.Days)
Выведет 60. Я ошибся в расчётах и получил 61 день, а правильно 60 дней.
Date3 имеет тип TimeSpan. Теперь у Date3 можно получить количество дней date3.Days, а уже затем преобразовывать его в месяцы и годы.
Цитата Сообщение от TigerHawk Посмотреть сообщение
Ну даже если просто 2 месяца прибавить, к 23.11.2013, не получится 22.01.2014.
Потому что получится 23.01.2014. Всё правильно.
vb.net
1
2
Dim Date4 As Date = #11/23/2013#
Console.WriteLine(Date4.AddMonths(2))
Напечатает «23.01.2014 0:00:00».
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2015, 18:00

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Определить диапазон возраста человека
написать программу, которая запрашивает у пользователя пол (1-мужской, 2-женский) и возраст...

Вывод возраста человека в словесном виде
Дано натуральное число n, определяющее возраст человека в годах. Дать для этого числа наименования...

Программа для анализа возраста человека
Помогите написать код Delphi. Написать программу, которая анализирует возраст человека и относит...

Вывести возраст человека в зависимости от введенного возраста
1-я Каким прилагательным можно охарактеризовать возраст человека? Субъективное представление...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.