Расчет заработной платы по отработанным часам - PullRequest
2 голосов
/ 04 августа 2010

Привет всем, я пытаюсь выяснить, как рассчитать зарплату сотруднику, когда они выходят из строя. Это код, который я сейчас использую:

 Dim theStartTime As Date
 Dim theEndTime As Date
 Dim totalTime As String

 theStartTime = "16:11:06"
 theEndTime = "18:22:01"
 totalTime = Format(CDbl((theEndTime - theStartTime) * 24), "#0.0")

Так что рабочие часы будут: 2ч 11м

Прямо сейчас, с моим кодом вычисления выше, я получаю 2.2. Что мне нужно добавить, чтобы вычислить правильное время 2:11 вместо 2: 20?

David

Ответы [ 3 ]

7 голосов
/ 04 августа 2010

Обратите внимание, что 2,2 часа это не 2:20, это 2: 12.

Изменение

Format(CDbl((theEndTime - theStartTime) * 24), "#0.0")

до

Format(theEndTime - theStartTime, "h:mm")

Вы получаете правильное значение, просто округляя его при печати. theEndTime - theStartTime - это промежуток времени, равный разнице между двумя временами. Как вы обнаружили, умножив его на 24, вы получите разное количество часов. Однако затем вам придется снова разделить на 24, чтобы использовать форматирование даты / времени.

Проверьте все способы форматирования даты и времени в VB6 .

1 голос
/ 04 августа 2010

Во-первых, я настоятельно рекомендую по возможности перейти на .NET Framework (с его простым в использовании классом TimeSpan).

Но, имея дело с VB6, вы должны иметь возможность использовать функцию DATEDIFF (и прошло уже много лет с тех пор, как я коснулся VB6, поэтому конкретный синтаксис может быть немного неправильным

Dim iHours As Integer, iMins As Integer
iMins = DateDiff("n", theStartTime, theEndTime)
iHours = iMins / 60
iMins = iMins Mod 60
0 голосов
/ 04 августа 2010

Вам также следует попробовать привести его к типу Currency, который может представлять все числовые значения (в пределах 4 цифр слева от десятичной точки и 15 цифр справа) .

Format(CCur((theEndTime - theStartTime) * 24), "#0.00")
...