หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

กระดานข่าวสาร เว็บบอร์ด - www.g2gnet.com
ดาวน์โหลดฟรีโปรแกรม และ Free Souce Code ได้ที่นี่ ...
รู้จักกับเว็บมาสเตอร์ - www.g2gnet.com
::: โปรแกรมมาใหม่ :::
โปรแกรมพิมพ์สติ๊กเกอร์บาร์โค้ด - Barcode Sticker
โปรแกรมพิมพ์สติ๊กเกอร์บาร์โค้ด - Barcode Sticker
โปรแกรมไปรษณีย์ และ จุดชำระค่าบริการ (iPayPost Software)
โปรแกรมไปรษณีย์ และ จุดชำระค่าบริการ
โปรแกรมจุดรับชำระค่าบริการ (iPayLite Software)
โปรแกรมจุดรับชำระค่าบริการ
::: BarcodeSoft :::
::: Printing :::
โปรแกรมพิมพ์รหัสบาร์โค้ด - BarcodeSoft Printing
โปรแกรมรหัสไปรษณีย์ทั่วไทย
::: G2GNet PostCode :::
!!!!! แจกฟรี !!!!!
ดาวน์โหลดโปรแกรมรหัสไปรษณีย์ทั่วไทย G2GNet PostCode Thailand
Visitors - Session views
 3 4 9 3 1 7 9

7 ธันวาคม พ.ศ.2549
232 Users On-Line.
Visitors - Page views
 6 1 5 2 6 0 2
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  
    ดาวน์โหลด และ แนะนำวิธีการติดตั้ง Active Report Professional 2.0
    แจกฟรี Source Code โปรแกรมขายสินค้า - Point Of Sale (โดย เว็บมาสเตอร์-ทองก้อน
    แจกฟรี Source Code การพิมพ์ใบกำกับภาษี - Active Report 2.0 (โดย ctx-9000@hotmail.com)
    SourceCode การดึงข้อมูลมาแสดงผลลงใน SharpGrid (โดย dos_network@hotmail.com)
    แจกฟรี Source Code VB6+Access โปรแกรมฐานข้อมูลครุภัณฑ์
    แจกโปรแกรมดูทีวี ดูหนัง ฟังวิทยุ ฟังเพลงออนไลน์ - G2GnetTV On Line ... ฟรีๆๆๆๆ
          ข้อมูลสถานี/รายการ (XML)  ข้อมูลสถานี/รายการ (HTML)
โปรแกรมระบบบัญชี Profit - Account

ฟังค์ชั่นที่ใช้ในการคำนวณหาค่าความแตกต่างกันของเวลา (Time)

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 17/3/2552   เวลา: 14:31
(อ่าน : 15282)/(ตอบ : 12)  ข้อคิดเห็น   |   พิมพ์   |  
อันที่จริงเรื่องนี้เคยตอบคำถามให้ไปแล้วแหละครับ ... เพียงแต่ว่าไม่ได้เขียนคำอธิบายเอาไว้ให้ดูกัน หลายคนก็เลยงงๆ และ สงสัยว่าที่มา ที่ไปของแนวคิดมันเป็นอย่างไร และนี่ก็คืออีกตัวอย่างหนึ่งที่ผมต้องการแสดงให้เห็นถึง "วิธีการคิด หรือ Algorithm" ซึ่งไม่ว่าเราจะใช้ตัวแปลภาษา (ระดับสูง) ตัวไหนก็ตามที วิธีการคิด มันก็ไม่ผิดแผกแตกต่างกันไปเลย ปัจจุบันนี้มีเด็กนักศึกษาที่จบไปแล้ว หรือ ที่กำลังจะจบ ซึ่งมีเป็นจำนวนมากที่ถูกฝึกมาให้ใช้โปรแกรม แต่ไม่ได้ถูกฝึกมาให้เขียนโปรแกรม ... อย่างเช่นภาษา BASIC สิ่งที่เด็กๆเหล่านี้เรียนรู้กลับไม่ใช่ภาษา BASIC แต่กลับเป็น BASIC พื้นฐานในการใช้งานโปรแกรม คือ จับโน่น ลากนี่มาวาง รัน ... จบ ... ซึ่งมันคนละ BASIC กันเลย ... แต่ก็มีหลายคนเหมือนกัน ที่มุ่งมั่น ทุ่มเท ขยัน ขวนขวาย และ แสวงหาความรู้เพิ่มเติมให้กับตัวเอง จนจบการศึกษาออกมาด้วยความมั่นใจในตัวเองสูงขึ้น ก็ขอแสดงความยินดีกับน้องนุ่น (True) น้องตุ๊ น้องทั้ง 2 ที่ผมเคยเห็นหน้าแต่ใน MSN ... ว่างๆก็ส่งเหล้ามาปลอบขวัญให้กำลังใจพี่ด้วยเด้อ 55555+ (ส่วนน้องผู้หญิงคนนึงที่ปทุมธานี ผมโยน เอ้ย มอบให้นาย Dos_Network เป็นเทรนเนอร์ให้ ไม่รู้ไปถึงไหนแล้วคร้าบบบบบ ... ให้น้องเขาได้ปริญญาบัตรน่ะ ไม่ใช่ปริญญาบุตร เอิ๊กๆๆๆๆ)
หลักการ คือ
  1. ให้หาความแตกต่างกันของเวลา 2 เวลา ด้วยคำสั่งภายใน (หรือฟังค์ชั่น) DateDiff ออกมาเป็นระดับวินาที
  2. หาความแตกต่างกันของจำนวนชั่วโมง ให้หารด้วยจำนวน 3600 วินาที (60 นาที x 60 วินาที)
  3. หาความแตกต่างกันของจำนวนนาที ให้ลบออกจากจำนวนชั่วโมงที่ต่างกันก่อน (แต่คิดเป็นวินาทีน่ะครับ) แล้วให้หารด้วยจำนวน 60 วินาที (1 นาที เท่ากับ 60 วินาที)
  4. หาความแตกต่างกันในระดับวินาที ให้ลบออกจากจำนวนชั่วโมงที่ต่างกัน (คิดเป็นวินาที) และ ลบออกด้วยจำนวนนาทีที่ต่างกัน (นี่ก็เป็นระดับวินาที)
บทความที่เกี่ยวข้อง
ฟังค์ชั่นที่ใช้ในการคำนวณหาค่าความแตกต่างระหว่างวันเดือนปี 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


ผลลัพธ์ที่ได้จากการคำนวณเวลา

มาดูโค้ดกันเถอะ ...

Option Explicit

Private Sub cmdCalDiffTime_Click()
Dim ResultTime As String
    ' เรียกไปยังฟังค์ชั่น CalTime เพื่อส่งค่าเวลาเริ่มต้น และ สิ้นสุดไป
    ' และ ส่งค่ากลับ (Return) มาเป็นแบบ String ... คุณจะเอามาเป็นเวลาก็ได้
    ResultTime = CalTime(dtpStartTime, dtpEndTime)
    
    ' การส่งค่าว่างเปล่ากลับมา ... แสดงว่าการคำนวณล้มเหลว ไม่ต้องทำการแสดงผล
    If ResultTime <> "" Then MsgBox "จำนวนเวลาที่ต่างกัน : " & _
        ResultTime, vbOKOnly + vbInformation, "รายงานผล"
End Sub

Private Sub Form_Load()
    ' ตั้งฟอร์มให้อยู่กึ่งกลางจอภาพ ... เครื่องหมาย \ คือ การหารตัดเศษ
    ' การคำนวณแบบนี้จะเร็วกว่าการหารเอาเศษ / ... น่ะครับพี่น้อง (ติ๊บเล็กๆ)
    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:
ประโยชน์ก็คงนำไปใช้ในเรื่องของการคำนวณเวลาของการทำงาน หรือ การทำงานล่วงเวลา (Over Time - OT) เป็นหลักล่ะครับ พี่น้อง ... ซึ่งจากตอนที่แล้วเป็นการคำนวณเรื่องของวันที่ ซึ่งการคำนวณจากเวลานี้ จะช่วยหาจำนวนเวลาของการทำงานข้ามวันได้อย่างไม่ยากเย็นนักหรอกครับ ... พี่น้อง

ร่วมแสดงความคิดเห็น

[ความเห็นที่:  1] จากคุณ : Mr.Den เมื่อ 17/3/2552 15:25:45  IP: 58.9.105.189

อาจารย์ครับ..'ปริญญาบุตร'  มันเป็นยังไงครับ? เอิ๊กๆๆๆๆ
ขออนุญาตินะครับ !!  ฮ่าๆๆๆๆๆๆๆ ขำกลิ้งเลยครับ

ขอบคุณครับ

[ความเห็นที่:  2] จากคุณ : Dos_Network เมื่อ 18/3/2552 8:02:05  IP: 118.175.90.37

อ้างจาก **น้องผู้หญิงคนนึงที่ปทุมธานีง**
เอ่อตอนนี้เค้าก็สอบผ่านไปเรียบร้อยแล้วแล้วล่ะครับ  (มาตอบแทนเค้ายังกะครอบครัวเดียวกัน 555)
พักหลังๆไม่ค่อยได้คุยกับเค้าเลย อิอิอิ สงสัยงอนซะแล้วมั้ง เพราะมัวแต่ยุ่งอยู่กับการทำ Stock สินค้า กับ Mailserver ให้เสร็จภายในสิ้นเดือนนี้  กะว่าเสร็จแล้วก็จะลาพักร้อนสัก 2 - 3 วันพาน้องๆไปเที่ยวสักหน่อย  น้องๆคนไหนสนในจะไปด้วยกันติดต่อเข้ามาได้นะครับ เอิ๊กๆๆๆๆ.....

[ความเห็นที่:  3] จากคุณ : ทองก้อน เมื่อ 18/3/2552 16:53:09

อาการแบบนี้ ... เขาเรียกว่าถีบหัวไล่ส่ง ยังไม่รู้อีกเหรอ (ล้อเล่นน่ะจ๊ะน้องรุ้ง ... 55555+) ... 

[ความเห็นที่:  4] จากคุณ : ctx9000 เมื่อ 18/3/2552 20:29:30  IP: 58.147.37.222

ว่าแล้วก็อยากได้  ..'ปริญญาบุตร' 

[ความเห็นที่:  5] จากคุณ : ทองก้อน เมื่อ 20/3/2552 2:46:29

เมื่ออาทิตย์ที่แล้ว ผมพึ่งไปงานแต่งงานลูกศิษย์ท้ายกุฏิของผมคนนึง ... ทะลึ่งไปใช้มนต์ดำ  ... เสกเด็กเข้าท้องผู้หญิงซ่ะงั้น ... เป็นไงล่ะ ... ลาทีความโสด ... เอิ๊กๆๆๆๆ

[ความเห็นที่:  6] จากคุณ : Mr.Den เมื่อ 20/3/2552 13:49:39  IP: 58.9.104.48

ก็เลยได้รับ 'ปริญญาบุตร' ไปเลยใช่ไหมครับ?
ผู้หญิงที่เจอมนต์ดำ คงเข็ดขยาดผู้ชายไปเลย
หรือว่ายังสงสัยอยู่?

[ความเห็นที่:  7] จากคุณ : kon_sarakham เมื่อ 31/5/2552 15:08:35  IP: 113.53.169.222

ขออนุญาตถามครับ...เวลาเริ่มต้น ถ้า เป็น 23.00 น.  แล้วไปสิ้นสุดที่ 01.00 น. ของอีก วันละครับละครับ...แบบนี้ เป็น กรณีที่ เวลาเริ่มต้นมากกว่า แล้วเวลาสิ้นสุดถูกไหม ครับ...เพราะ ถ้า ทำงาน กะกลาง คืน ต้องทำงาน ข้าม วัน เช่น เข้า ทำงาน 18.00 น.  ออก กะ เวลา 06.00 น. อีก วัน แล้ว จะแก้ ปัญหา แบบนี้ ยังไง ครับ...

[ความเห็นที่:  8] จากคุณ : neoclassic เมื่อ 21/9/2552 13:13:21  IP: 58.9.60.191

อยากรู้เหมือนกับ คุณ kon_sarakham ครับ 

[ความเห็นที่:  9] จากคุณ : มือใหม่ เมื่อ 18/1/2554 21:29:29  IP: 58.64.75.198

สุดยอดเลยครับ ขอนำไปดัดแปลงครับ ขอบคุณมาก ๆ ครับมีประโยชน์จริง ๆ 

[ความเห็นที่:  10] จากคุณ : joesky เมื่อ 20/1/2555 9:53:53  IP: 101.108.221.197

เว็บนี้ น่าสนใจดีแหะ  มีทั้งสาะรความรู้ และยังตลกกันอีกด้วยย  ขอฝากตัวเป็นศิษย์เว็บไซต์นี้ด้วยนะคัฟ

[ความเห็นที่:  11] จากคุณ : robinhood เมื่อ 5/7/2556 11:27:27  IP: 180.183.165.30

บทความนี้ไม่สามารถนำไปใช้งานได้จริง บทความนี้ แค่รันก็ error แล้ว

[ความเห็นที่:  12] จากคุณ : ทองก้อน เมื่อ 5/7/2556 12:20:04

คุณ robinhood ครับ ติดขัด Error ตรงไหนก็โปรดระบุมาได้เลยครับ โค้ดที่เห็นทั้งหมดในเว็บไซต์นี้ผ่านการทดสอบว่าทำงานได้จริงหมดก่อนที่จะนำมาเผยแพร่ในภาคภาษาไทย และฟรีไม่มีเสียตังค์ด้วยน่ะครับผม


ก่อนการคลิ๊กโพสต์ข้อความ ขอความกรุณาใช้ถ้อยคำที่สุภาพด้วยครับ เว็บไซต์แห่งนี้เป็นแหล่งเผยแพร่ความรู้ ดังนั้นสำหรับท่านที่พยายามจะป่วนเว็บไซต์ หากท่านเป็น "คนไทย" เช่นเดียวกันกับผม ก็ขอความกรุณาได้โปรดเห็นใจ "คนไทย" อีกจำนวนไม่น้อย ที่เข้ามาขอความช่วยเหลือ จากเว็บไซต์ของผมด้วยน่ะครับ และหากท่านใดไม่เข้าใจในตรงจุดไหน ก็ขอให้ระบุสิ่งที่อยากจะถามออกมา บทความของผมแทบทั้งหมดต้องอาศัยทักษะการปฏิบัติเป็นหลัก ดังนั้นขอให้ดู และ ทดสอบจากโค้ดโปรแกรมประกอบตามไปด้วย
IP Address: 54.237.228.144
ชื่อของคุณ:

ข้อคิดเห็น:

3 + 1 = ?  (กรุณาป้อนคำตอบลงในช่องด้านล่างให้เป็น ภาษาไทย ตามผลบวกของตัวเลขให้ถูกต้องก่อนด้วยน่ะครับ เช่น ศูนย์)
  


จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
Copyright © 2005 g2gNet.Com All rights reserved.
Email: thongkorn@hotmail.com หรือ โทร. 08-6862-6560