คำนวณวันตามที่เกินปี
กระทู้เก่าบอร์ด อ.Yeadram

 1,633   5
URL.หัวข้อ / URL
คำนวณวันตามที่เกินปี

คล้าย ๆ กับสูตรที่คำนวณอายุครับ แต่ไม่นับเดือน ให้นับเป็นเป็นปี และ วัน เช่น 5 ปี 92 วัน ต้องทำอย่างไรครับ

5 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R08352
Public Sub GetDiffYearAndDay(FromDate As Date, ToDate As Date, YearNum As Integer, DayNum As Integer)
    Dim AniversaryDate As Date

    YearNum = DateDiff("yyyy", FromDate, ToDate)
    AniversaryDate = DateAdd("yyyy", YearNum, FromDate)

    If ToDate < AniversaryDate Then
        YearNum = YearNum - 1
        DayNum = DateDiff("d", AniversaryDate, ToDate)
    Else
        YearNum = YearNum
        DayNum = DateAdd("d", 1, DateDiff("d", AniversaryDate, ToDate))
    End If
End Sub


จากโค้ดนี้ ระยะเวลาจาก 1 มกรา ถึง 2 มกราปีเดียวกัน จะได้ผลลัพธ์เป็น 0 ปี 2 วัน

ถ้า 1 มกรา ถึง 1 มกราปีถัดไป จะได้ผลลัพธ์เป็น 1 ปี 1 วัน

จำนวนปีคิดว่าไม่น่าจะมีปัญหา แต่จำนวนวันขึ้นกับว่านับวันยังไง อาจแตกต่างกับในโค้ดนี้อยู่ 1 วัน ยังไงก็ไปปรับปรุงเอาเองนะครับ
2 @R08426
ขอบพระคูณครับ แต่ยังมีปัญหาเอาไปใช้ไม่เป็น ต้องใช้สูตรแบบนี้หรือเปล่าครับ
GetDiffYearAndDay(1/1/2010, 1/1/2010, YearNum As Integer, DayNum As Integer)
แล้ว YearNum กับ DayNum คือค่าอะไรครับ
3 @R08428
YearNum คือตัวแปรที่จะคืนค่าจำนวนของปี ส่วน DayNum ก็็จะคืนค่าจำนวนของวัน เวลาใช้ คุณต้องเขียนโค้ดเพื่อเรียกใช้ฟังก์ชั่นนี้ เช่น

dim MyYear as integer
dim MyDay as integer

call GetDiffYearAndDay(#1-Jan-2010#, #5-Feb-2011#, MyYear, MyDay)

me.TxtYear = MyYear
me.TxtDay = MyDay

ส่วนวันที่เริ่มต้นและสิ้นสุด ถ้าป้อนเป็นค่าคงที่ (เหมือนในตัวอย่างนี้) ผมชอบที่จะป้อนในรูปแบบที่โปรแกรมจะไม่มีทางตีความหมายผิดพลาดไปได้เลย ก็คือ #วัน-ชื่อเดือน-ปี#
4 @R08429
ขอบพระคุณ อาจารย์สันติสุขมาก ๆ ครับ เห็นได้รับความกรุณาจากอาจารย์สันติสุขหลาย ๆ ครั้ง ตั้งแต่สมัยเว็บอาจารย์สุภาพ เกือบ 10 ปีแล้วมังครับ
ขอบพระคุณอย่างสูง
5 @R08433
ผมชักแย่แล้ว โค้ดที่ให้ไปผิดมหันต์เลย อันนี้ที่แก้ไขแล้วครับ

Public Sub GetDiffYearAndDay(FromDate As Date, ToDate As Date, YearNum As Integer, DayNum As Integer)
    Dim AniversaryDate As Date

    YearNum = DateDiff("yyyy", FromDate, ToDate)
    AniversaryDate = DateAdd("yyyy", YearNum, FromDate)

    If ToDate = AniversaryDate - 1 Then
        YearNum = YearNum
        DayNum = 0
    ElseIf ToDate < AniversaryDate Then
        YearNum = YearNum - 1
        AniversaryDate = DateAdd("yyyy", -1, AniversaryDate)
        DayNum = DateDiff("d", AniversaryDate, ToDate)
    Else
        YearNum = YearNum
        DayNum = DateDiff("d", AniversaryDate, ToDate) + 1
    End If
End Sub


@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2568s