2010-08-03 126 views
2

嘿,我想弄清楚如何計算一個員工的工資,當他們的時鐘了。這是我目前正在使用的代碼:按工作時間計算工資

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") 

所以可行的時間應該是:2H11米

眼下,隨着我的計算上面代碼中,我得到2.2。我需要添加什麼才能計算出2:11而不是2:20的正確時間?

大衛

+2

2小時11分鐘(關閉一分鐘) – 2010-08-03 20:25:40

+0

如果你做了#0.00,你可能會看到它是類似於2.18 – taylonr 2010-08-03 20:27:41

+0

啊,是的,放####效果更好,但它仍然給我2小時18分鐘應該給2h 11m?因此,給他們額外的7分鐘的時間沒有工作 – StealthRT 2010-08-03 21:50:04

回答

7

注意時間的2.​​2小時 2:20,這是2:12。

變化

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

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

你得到正確的價值,只是四捨五入它,當你打印。 theEndTime - theStartTime是等於兩次之差的時間跨度。正如你發現的那樣,乘以24會給你不同的小時數。但是,您必須再次用24除以使用日期/時間格式。

查看所有的方式format dates and time in VB6

+0

我將如何增加一個工資到2:11的產出?工資是10.50 – StealthRT 2010-08-03 21:46:45

+0

只需等到你不得不考慮over時間。這是一個大混亂,考慮到規則因地點不同而不同,有些情況下每週的一天也不一樣。 – JohnFx 2010-08-03 22:06:23

+1

'paycheck =(theEndTime - theStartTime)* 24 * wage'。我希望這是一個項目,而不是你真正要在你的業務中使用的東西。不要忘記夏令時等事情,因爲我不確定'(theEndTime - theStartTime)'將如何處理。 – dlras2 2010-08-03 22:11:23

0

您還應該嘗試將其轉換爲Currency類型,該類型可以表示所有數值(小數點左邊的4位數字和右邊的15位數字)

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

這裏的問題不是四捨五入的,而是代表性。 – dlras2 2010-08-03 20:36:29

+0

@丹尼爾 - 這就是我說的不是我? – ChaosPandion 2010-08-03 20:38:45

+0

對不起 - 我說我的評論錯了;問題在於輸出的格式。鑄造成「貨幣」並不能解決2.2小時不是2:20的問題。 – dlras2 2010-08-03 20:42:54

1

首先,我強烈建議儘可能使用.NET框架(使用易用的TimeSpan類)。

但是,經營VB6,你應該能夠使用DATEDIFF功能(它已經多年,因爲我已經觸及VB6所以具體語法可能有點過

Dim iHours As Integer, iMins As Integer 
iMins = DateDiff("n", theStartTime, theEndTime) 
iHours = iMins/60 
iMins = iMins Mod 60 
+2

我們有些人沒有把所有舊版軟件升級到.Net的奢望。 (儘管我也會在可能的情況下推薦它。) – dlras2 2010-08-03 20:35:53

+0

當使用您的代碼Stehpen時,我只得到了11。 – StealthRT 2010-08-03 21:47:32

+0

我希望11在iMins和2在iHours。 – 2010-08-04 01:15:19