Рассчитать общее время между датами в часах и минутах

Hi

Я пытаюсь решить проблему с помощью VB, и мне нужна помощь. Я очень новичок в языке (1 неделя). Проблема в том, что я создал пользовательскую форму, чтобы показать, сколько часов и минут прошло между двумя разными временами, похожими на табель учета рабочего времени.

Пользовательская форма состоит из двух календарей, и под каждым календарем есть два текстовых поля; по одному ящику для записи часа и минуты, когда они ушли, и еще два ящика для записи времени, когда они вернулись.

Я использовал код, чтобы вычесть календари вместе (например, календарь на входе — календарь на выходе), а затем умножить это на 24, чтобы указать часы. Затем под календарем у меня есть текстовое поле, в котором пользователь может ввести оставшийся час. Затем я минус 24 по часам, например. если было 24-15, появится 9 (9 часов того дня), тогда я бы добавил это к цифре, которую они вставили в текстовое поле «Час в (время возврата)». например 14. Затем я бы добавил их вместе, например. 9 + 14 = 23 и отобразить это в другом текстовом поле Total Hours. Поэтому он будет отображать 23, что означает 23 часа.

Затем я хочу показать еще два текстовых поля для указания минут. Один для минут выхода, затем минут входа.

У меня проблема с преобразованием этих минут, например, если время выхода составляет 15:50, а время прибытия на следующий день - 15:55, оно отображается как 24 (в одном текстовом поле) и 105 минут (в другом тексте) коробка). Я хотел бы, чтобы минуты добавлялись к часу, а остаток оставшихся минут отображался в текстовом поле минут. Это должно отображать 24 (в одном текстовом поле) и 5 ​​(в другом текстовом поле).

Конечная цель состоит в том, чтобы получить результат, показывающий, что человек отсутствовал в течение определенного количества дней, часов и минут, например, 2 дня, 5 часов и 10 минут. Любые идеи о том, как я могу изменить свой код для достижения этой цели?

Вот мой код.

Пожалуйста помоги

Dim number1 As Date
Dim number2 As Date
Dim number3 As Integer
Dim number4 As Integer
Dim Number5 As Integer
Dim Number6 As Integer
Dim answer  As Integer
Dim answer2 As Integer
Dim answer3 As Integer
Dim answer4 As Integer
Dim answer5 As String

number1 = DTPicker1
number2 = DTPicker2
number3 = Txthourout
number4 = TxtHourin
Number5 = TxtMinuteout
Number6 = TxtMinuetIn


answer = number2 - number1
answer2 = answer * 24
answer3 = answer2 - number3
answer4 = answer3 + number4

answer5 = Number5 + Number6


TextBox1.Text = answer4
TextBox2.Text = answer5

End Sub

person matthew parkes    schedule 13.11.2012    source источник
comment
добро пожаловать Мэтью. пожалуйста, используйте более понятные имена для ваших переменных для себя и для нас, чтобы сделать это более понятным. Думайте об этом как о книге, в которой писатель назвал своих персонажей не Джоном Стронгом и Лизой МакСометинг, а Чар1, Чар2, Чар3.   -  person K_B    schedule 13.11.2012
comment
фото нет в вашем посте, попробуйте загрузить его еще раз. Также я внесу некоторые изменения в ваш OP, чтобы сделать его немного более читабельным.   -  person K_B    schedule 13.11.2012


Ответы (2)


Хорошо, для ответа вам следует сообщить, что Дата содержит дату и время, и она фактически хранится как числовое значение, где дата составляет целую часть (хотя она может быть больше, чем значение nax для Integer, поэтому убедитесь, что вы используете тип переменной Long для сохранения части даты).

Далее. Если вы возьмете разницу между двумя датами и снова поместите этот ответ в переменную Date, он легко даст вам ответы, которые вы ищете:

dtDiff = dtEnd - dtStart

Поскольку теперь вы можете выполнить следующее:

intDaysDiff = Int(dtDiff) 'As the number of days between the two dates is expected to be small enough we can use the Int() function
intHoursDiff = Hour(dtDiff)
intMinutesDiff = Minute(dtDiff)

Для получения минут, часов и т. д. просто используйте тот же метод.

сообщите о них, как вы хотите для пользователя в пользовательской форме.

person K_B    schedule 13.11.2012
comment
Я пытался найти это для Access, и это единственный пример, который я нашел. Доступ работает с Int (дни), Hour (Часы), Minute (Минуты), Seconds (Секунды). - person Elias; 17.11.2016

Это должно помочь вам начать. См. эту ссылку для синтаксиса разницы дат.

Dim d1 As Date, d2 As Date, diff As Variant
'sample dates
d1 = DateTime.Now   '<--you'd use your calendar 1 here
d2 = DateTime.DateAdd("h", 4, d1)   '<--you'd use your calendar 2 here

'change "h" to what ever part of the different you want.
diff = DateTime.DateDiff("h", d1, d2)

Также взгляните на CDate. и функции Format. Их можно использовать, чтобы убедиться, что что-то находится в правильном формате даты, и преобразовать даты в ваши предпочтительные строковые представления.

person Brad    schedule 13.11.2012
comment
Вы, кажется, используете VB.NET. Вопрос о VBA. - person Tim Williams; 13.11.2012
comment
@TimWilliams Это все функции VBA :) - person Brad; 13.11.2012