กระทู้เก่าบอร์ด อ.Yeadram
1,633 5
URL.หัวข้อ /
URL
คำนวณวันตามที่เกินปี
คล้าย ๆ กับสูตรที่คำนวณอายุครับ แต่ไม่นับเดือน ให้นับเป็นเป็นปี และ วัน เช่น 5 ปี 92 วัน ต้องทำอย่างไรครับ
5 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R08426
ขอบพระคูณครับ แต่ยังมีปัญหาเอาไปใช้ไม่เป็น ต้องใช้สูตรแบบนี้หรือเปล่าครับ
GetDiffYearAndDay(1/1/2010, 1/1/2010, YearNum As Integer, DayNum As Integer)
แล้ว YearNum กับ DayNum คือค่าอะไรครับ
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
ส่วนวันที่เริ่มต้นและสิ้นสุด ถ้าป้อนเป็นค่าคงที่ (เหมือนในตัวอย่างนี้) ผมชอบที่จะป้อนในรูปแบบที่โปรแกรมจะไม่มีทางตีความหมายผิดพลาดไปได้เลย ก็คือ #วัน-ชื่อเดือน-ปี#
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
Time: 0.2568s
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 วัน ยังไงก็ไปปรับปรุงเอาเองนะครับ