¿Ñ§¤ìªÑè¹·Õèãªé㹡ÒäӹdzËÒ¤èÒ¤ÇÒÁᵡµèÒ§¡Ñ¹¢Í§àÇÅÒ (Time)

Category »  VB 6/VB.Net
â´Â : Webmaster àÁ×èÍ 17/3/2552   àÇÅÒ: 14:31
(ÍèÒ¹ : 32857) 
Íѹ·Õè¨ÃÔ§àÃ×èͧ¹Õéà¤ÂµÍº¤Ó¶ÒÁãËéä»áÅéÇáËÅФÃѺ ... à¾Õ§áµèÇèÒäÁèä´éà¢Õ¹¤Ó͸ԺÒÂàÍÒäÇéãËé´Ù¡Ñ¹ ËÅÒ¤¹¡çàŧ§æ áÅРʧÊÑÂÇèÒ·ÕèÁÒ ·Õè仢ͧá¹Ç¤Ô´Áѹà»ç¹ÍÂèÒ§äà áÅйÕè¡ç¤×ÍÍÕ¡µÑÇÍÂèҧ˹Öè§·Õè¼Áµéͧ¡ÒÃáÊ´§ãËéàËç¹¶Ö§ "ÇÔ¸Õ¡ÒäԴ ËÃ×Í Algorithm" «Öè§äÁèÇèÒàÃÒ¨ÐãªéµÑÇá»ÅÀÒÉÒ (ÃдѺÊÙ§) µÑÇä˹¡çµÒÁ·Õ ÇÔ¸Õ¡ÒäԴ Áѹ¡çäÁè¼Ô´á¼¡áµ¡µèÒ§¡Ñ¹ä»àÅ »Ñ¨¨ØºÑ¹¹ÕéÁÕà´ç¡¹Ñ¡ÈÖ¡ÉÒ·Õ診ä»áÅéÇ ËÃ×Í ·Õè¡ÓÅѧ¨Ð¨º «Öè§ÁÕà»ç¹¨Ó¹Ç¹ÁÒ¡·Õè¶Ù¡½Ö¡ÁÒãËéãªéâ»Ãá¡ÃÁ áµèäÁèä´é¶Ù¡½Ö¡ÁÒãËéà¢Õ¹â»Ãá¡ÃÁ ... ÍÂèÒ§àªè¹ÀÒÉÒ BASIC ÊÔè§·Õèà´ç¡æàËÅèÒ¹ÕéàÃÕ¹ÃÙé¡ÅѺäÁèãªèÀÒÉÒ BASIC áµè¡ÅѺà»ç¹ BASIC ¾×鹰ҹ㹡ÒÃãªé§Ò¹â»Ãá¡ÃÁ ¤×Í ¨Ñºâ¹è¹ ÅÒ¡¹ÕèÁÒÇÒ§ Ãѹ ... ¨º ... «Öè§Áѹ¤¹ÅÐ BASIC ¡Ñ¹àÅ ... áµè¡çÁÕËÅÒ¤¹àËÁ×͹¡Ñ¹ ·ÕèÁØè§ÁÑè¹ ·ØèÁà· ¢Âѹ ¢Ç¹¢ÇÒ áÅÐ áÊǧËÒ¤ÇÒÁÃÙéà¾ÔèÁàµÔÁãËé¡ÑºµÑÇàͧ ¨¹¨º¡ÒÃÈÖ¡ÉÒÍÍ¡ÁÒ´éǤÇÒÁÁÑè¹ã¨ã¹µÑÇàͧÊÙ§¢Öé¹ ¡ç¢ÍáÊ´§¤ÇÒÁÂÔ¹´Õ¡Ñº¹éͧ¹Øè¹ (True) ¹éͧµØê ¹éͧ·Ñé§ 2 ·Õè¼Áà¤ÂàËç¹Ë¹éÒáµèã¹ MSN ... ÇèÒ§æ¡çÊè§àËÅéÒÁÒ»Åͺ¢ÇÑ­ãËé¡ÓÅѧ㨾Õè´éÇÂà´éÍ 55555+ (Êèǹ¹éͧ¼ÙéË­Ô§¤¹¹Ö§·Õè»·ØÁ¸Ò¹Õ ¼Áâ¹ àÍé ÁͺãËé¹Ò Dos_Network à»ç¹à·Ã¹à¹ÍÃìãËé äÁèÃÙéä»¶Ö§ä˹áÅéǤÃéÒººººº ... ãËé¹éͧà¢Òä´é»ÃÔ­­ÒºÑµÃ¹èÐ äÁèãªè»ÃÔ­­ÒºØµÃ àÍÔê¡ææææ)
ËÅÑ¡¡Òà ¤×Í
  1. ãËéËÒ¤ÇÒÁᵡµèÒ§¡Ñ¹¢Í§àÇÅÒ 2 àÇÅÒ ´éǤÓÊÑè§ÀÒÂã¹ (ËÃ×Ϳѧ¤ìªÑè¹) DateDiff ÍÍ¡ÁÒà»ç¹ÃдѺÇÔ¹Ò·Õ
  2. ËÒ¤ÇÒÁᵡµèÒ§¡Ñ¹¢Í§¨Ó¹Ç¹ªÑèÇâÁ§ ãËéËÒôéǨӹǹ 3600 ÇÔ¹Ò·Õ (60 ¹Ò·Õ x 60 ÇÔ¹Ò·Õ)
  3. ËÒ¤ÇÒÁᵡµèÒ§¡Ñ¹¢Í§¨Ó¹Ç¹¹Ò·Õ ãËéźÍÍ¡¨Ò¡¨Ó¹Ç¹ªÑèÇâÁ§·ÕèµèÒ§¡Ñ¹¡è͹ (áµè¤Ô´à»ç¹ÇÔ¹Ò·Õ¹èФÃѺ) áÅéÇãËéËÒôéǨӹǹ 60 ÇÔ¹Ò·Õ (1 ¹Ò·Õ à·èҡѺ 60 ÇÔ¹Ò·Õ)
  4. ËÒ¤ÇÒÁᵡµèÒ§¡Ñ¹ã¹ÃдѺÇÔ¹Ò·Õ ãËéźÍÍ¡¨Ò¡¨Ó¹Ç¹ªÑèÇâÁ§·ÕèµèÒ§¡Ñ¹ (¤Ô´à»ç¹ÇÔ¹Ò·Õ) áÅРźÍÍ¡´éǨӹǹ¹Ò·Õ·ÕèµèÒ§¡Ñ¹ (¹Õè¡çà»ç¹ÃдѺÇÔ¹Ò·Õ)
º·¤ÇÒÁ·Õèà¡ÕèÂÇ¢éͧ
¿Ñ§¤ìªÑè¹·Õèãªé㹡ÒäӹdzËÒ¤èÒ¤ÇÒÁᵡµèÒ§ÃÐËÇèÒ§Çѹà´×͹»Õ 2 ¤èÒ
´ÒǹìâËÅ´
´ÒǹìâËÅ´ Source Code ÊÓËÃѺ MS Visual Basic 6.0 - Service Pack 6
 ´ÒǹìâËÅ´ Visual Basic 6.0 SP5: Run-Time Redistribution Pack
 ´ÒǹìâËÅ´ Microsoft Data Access Object (MDAC) áÅÐ Jet 4.0 Update
 ´ÒǹìâËÅ´ Microsoft Visual Basic Service Pack 6
àÃÔèÁµé¹¡Ãкǹ¡Ò÷ӧҹ

Project --> Components ...


Design Time


¤Ø³ÊÁºÑµÔ¢Í§ dtPicker


Run-Time


¼ÅÅѾ¸ì·Õèä´é¨Ò¡¡ÒäӹdzàÇÅÒ

ÁÒ´Ùâ¤é´¡Ñ¹à¶ÍÐ ...

Option Explicit

Private Sub cmdCalDiffTime_Click()
Dim ResultTime As String
    ' àÃÕ¡ä»Âѧ¿Ñ§¤ìªÑè¹ CalTime à¾×èÍÊ觤èÒàÇÅÒàÃÔèÁµé¹ áÅÐ ÊÔé¹ÊØ´ä»
    ' áÅÐ Ê觤èÒ¡ÅѺ (Return) ÁÒà»ç¹áºº String ... ¤Ø³¨ÐàÍÒÁÒà»ç¹àÇÅÒ¡çä´é
    ResultTime = CalTime(dtpStartTime, dtpEndTime)
    
    ' ¡ÒÃÊ觤èÒÇèÒ§à»ÅèÒ¡ÅѺÁÒ ... áÊ´§ÇèÒ¡ÒäӹdzÅéÁàËÅÇ äÁèµéͧ·Ó¡ÒÃáÊ´§¼Å
    If ResultTime <> "" Then MsgBox "¨Ó¹Ç¹àÇÅÒ·ÕèµèÒ§¡Ñ¹ : " & _
        ResultTime, vbOKOnly + vbInformation, "ÃÒ§ҹ¼Å"
End Sub

Private Sub Form_Load()
    ' µÑé§¿ÍÃìÁãËéÍÂÙè¡Öè§¡ÅÒ§¨ÍÀÒ¾ ... à¤Ã×èͧËÁÒ \ ¤×Í ¡ÒÃËÒõѴàÈÉ
    ' ¡ÒäӹdzẺ¹Õé¨ÐàÃçÇ¡ÇèÒ¡ÒÃËÒÃàÍÒàÈÉ / ... ¹èФÃѺ¾Õè¹éͧ (µÔêºàÅç¡æ)
    Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
    
    ' ¡Ó˹´¤èÒàÇÅÒ㹡Ò÷´Êͺ´Ù
    dtpStartTime.Value = "8:30:23"
    dtpEndTime.Value = "12:46:53"
End Sub

Public Function CalTime(StartTime As Date, EndTime As Date) As String
On Error GoTo ErrHandler

Dim cHH As Long
Dim cMM As Long
Dim cSS As Long

' ·´Êͺ¤èÒ¡è͹ÇèÒàÇÅÒàÃÔèÁµé¹µéͧ¹éÍ¡ÇèÒàÇÅÒ·ÕèÊÔé¹ÊØ´
If StartTime = EndTime Then
    ' ¤èÒà·èҡѹ¡çäÁèµéͧ¤Ó¹Ç³ÍÐäÃÍÕ¡áÅéÇ ... àÊÕÂàÇÅÒà»ÅèÒ 55555+
    CalTime = "0:00:00"
    Exit Function
    
' àÇÅÒàÃÔèÁµé¹ÁÒ¡¡ÇèÒ ¡çá¨é§ Error ãËé·ÃÒº
ElseIf StartTime > EndTime Then
    MsgBox "àÇÅÒàÃÔèÁµé¹¨ÐÁÒ¡¡ÇèÒä´éä§ÅèоÕè¹éͧ ... ÁÑèÇËÃ×Íà»ÅèÒ.", _
                    vbOKOnly + vbInformation, "ÃÒ§ҹ¤ÇÒÁ¼Ô´¾ÅÒ´"
    ' ¤×¹¤èÒÇèÒ§à»ÅèÒ¡ÅѺ ... ËÃ×ÍÍ×è¹æ¡çä´é ·ÕèàÃÒµéͧ¡ÒÃá¨é§¡ÅѺä»ÇèÒ·Ó§Ò¹ÅéÁàËÅÇ ...
    ' áÅШºâ»Ãá¡ÃÁÂèÍ (Function)
    CalTime = ""
    Exit Function
End If
  
' ===============================================================================
' ËÅÑ¡¡Òâͧ¡ÒÃËÒ¤èÒ¤ÇÒÁᵡµèÒ§¢Í§àÇÅÒ
' ãªé¡ÒÃËÒ¤èÒ¤ÇÒÁᵡµèÒ§ã¹ÃдѺ¨Ó¹Ç¹¢Í§ÇÔ¹Ò·Õ·Ñé§ËÁ´ÍÍ¡ÁÒ¡è͹
' áÅéǤèͤԴµÑ´ÍÍ¡¨Ò¡¨Ó¹Ç¹ªÑèÇâÁ§ ¹Ò·Õ áÅÐ ÇÔ¹Ò·Õ ·ÕèµèÒ§¡Ñ¹
' 1 ªÑèÇâÁ§ à·èҡѺ 3600 ÇÔ¹Ò·Õ
' 1 ¹Ò·Õ à·èҡѺ 60 ÇÔ¹Ò·Õ
Dim SecInMinute As Integer
Dim SecInHour As Integer
SecInMinute = 60    ' ¨Ó¹Ç¹ 1 ¹Ò·Õà·èҡѺ 60 ÇÔ¹Ò·Õ
SecInHour = 3600    ' ÁÒ¨Ò¡¨Ó¹Ç¹ 60 ¹Ò·Õã¹ 1 ªÑèÇâÁ§ ¤Ù³à¢éҡѺ 60 ÇÔ¹Ò·Õã¹áµèÅÐ¹Ò·Õ ´Ñ§¹Ñé¹ 1 ªÑèÇâÁ§ = 3600 ÇÔ¹Ò·Õ
' ===============================================================================

' ËҨӹǹªÑèÇâÁ§ (Hour) ... ËÒõѴàÈÉ ( \ ) ·Ôé§ä»àÅ ... ·Ó§Ò¹ä´éàÃçÇ¡ÇèÒ¡ÒÃËÒÃàÍÒàÈÉ ( / )
' ¡ÒáÓ˹´ª¹Ô´µÑÇá»ÃẺàÅ¢¨Ó¹Ç¹àµçÁ (Integer ËÃ×Í Long) ÁѹäÁèÁÕàÅ¢·È¹ÔÂÁÍÂÙèáÅéǤÃѺ
' ËÒ¤ÇÒÁᵡµèÒ§¢Í§¨Ó¹Ç¹ªÑèÇâÁ§ â´Â¹Ñºà»ç¹ÇÔ¹Ò·Õ ¨Ò¡¹Ñé¹ãËéËÒõѴàÈÉ´éÇ (¨Ó¹Ç¹¹Ò·Õ x ¨Ó¹Ç¹ÇÔ¹Ò·Õ)
' ¹Ñ蹤×Í ¤èÒ·Õèä´é \ (60 ¹Ò·Õ x 60 ÇÔ¹Ò·Õ) ... 1 ªÑèÇâÁ§¡ç¨Ðà·èҡѺ 3600 ÇÔ¹Ò·Õ
cHH = DateDiff("s", StartTime, EndTime) \ SecInHour

' ËҨӹǹ¹Ò·Õ (Minute) ...  äÅèà¤Ã×èͧËÁÒÂǧàÅçºãËé¶Ù¡´éǹèФÃѺ
' ¡ÒÃãÊèǧàÅçº ¨ÐÁÕ¤ÇÒÁÊӤѭ·ÕèÊÙ§¡ÇèÒà¤Ã×èͧËÁÒ + - * / ... ÍÂèÒÅ×Áà´ç´¢Ò´
' ¤ÇÒÁᵡµèÒ§¢Í§¨Ó¹Ç¹¹Ò·Õ ¤èÒ·Õèä´éãËéźÍÍ¡¨Ò¡¨Ó¹Ç¹ÇÔ¹Ò·Õ
' ¨Ó¹Ç¹ÇÔ¹Ò·Õ·Õèä´é ãËéźÍÍ¡¨Ò¡àÇÅҨӹǹªÑèÇâÁ§·ÕèµèÒ§¡Ñ¹¡è͹ (ªÑèÇâÁ§ x ÇÔ¹Ò·Õ)
' áÅéǤèÍÂËÒõѴàÈÉ´éÇ 60 ... à¾ÃÒÐ 1 ¹Ò·Õ = 60 ÇÔ¹Ò·Õ
cMM = (DateDiff("s", StartTime, EndTime) - (cHH * SecInHour)) \ SecInMinute

' ·ÕèàËÅ×Í¡çà»ç¹ÇÔ¹Ò·Õ (Second)
' ¨Ó¹Ç¹ÇÔ¹Ò·Õ·ÕèµèÒ§¡Ñ¹·Ñé§ËÁ´ - ¨Ó¹Ç¹ªÑèÇâÁ§·ÕèµèÒ§¡Ñ¹ - ¨Ó¹Ç¹¹Ò·Õ·ÕèµèÒ§¡Ñ¹
' ¨Ó¹Ç¹ªÑèÇâÁ§·ÕèµèÒ§¡Ñ¹ ¡Ñº  ¨Ó¹Ç¹¹Ò·Õ·ÕèµèÒ§¡Ñ¹ àÃÒ¤Ô´ÃдѺà»ç¹ÇÔ¹Ò·Õ¹èФÃѺ ... ¾Õè¹éͧ
cSS = DateDiff("s", StartTime, EndTime) - (cHH * SecInHour) - (cMM * SecInMinute)

' ¤×¹¤èÒ¡ÅѺãËé¿Ñ§¤ìªÑè¹ (Return ¤èÒ¡ÅѺà»ç¹ String)
CalTime = cHH & ":" & cMM & ":" & cSS

ExitProc:
    Exit Function

ErrHandler:
    MsgBox Err.Number & vbCrLf & Err.Description, vbOKOnly + vbInformation, "ÃÒ§ҹ¤ÇÒÁ¼Ô´¾ÅÒ´"
    Resume Next
End Function
Conclusion:
»ÃÐ⪹ì¡ç¤§¹Óä»ãªéã¹àÃ×èͧ¢Í§¡ÒäӹdzàÇÅҢͧ¡Ò÷ӧҹ ËÃ×Í ¡Ò÷ӧҹÅèǧàÇÅÒ (Over Time - OT) à»ç¹ËÅÑ¡ÅèФÃѺ ¾Õè¹éͧ ... «Ö觨ҡµÍ¹·ÕèáÅéÇà»ç¹¡ÒäӹdzàÃ×èͧ¢Í§Çѹ·Õè «Öè§¡Òäӹdz¨Ò¡àÇÅÒ¹Õé ¨ÐªèÇÂËҨӹǹàÇÅҢͧ¡Ò÷ӧҹ¢éÒÁÇѹä´éÍÂèÒ§äÁèÂÒ¡àÂ繹ѡËÃÍ¡¤ÃѺ ... ¾Õè¹éͧ