กระทู้เก่าบอร์ด อ.Yeadram
        
           1,786   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.5092s
    
      
		
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 วัน ยังไงก็ไปปรับปรุงเอาเองนะครับ