คำนวณวัน ระหว่างวันที่มีอยู่แล้ว กับวันที่กำหนดใหม่
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 369   5
URL.หัวข้อ / URL
คำนวณวัน ระหว่างวันที่มีอยู่แล้ว กับวันที่กำหนดใหม่

ผม Import Table เข้ามา เป็น Table ที่มี Field ชื่อ Datum (ไม่ทราบ Data Type แต่คิดว่าเป็น Date/Time) 
ใน datum ดูข้อมูลเป็น 26/07/2001 
ผมต้องการที่จะให้ User ใส่ วันที่ ๆ ต้องการ (สมมุตว่าเป็น MyDate) แล้วนำวันที่ ที่ใส่นั้นมาคำนวณ (Age) เป็นวัน เช่น 
MyDate = 04/09/2001   
Datum = 26/07/2001 
ได้ Age = 345 
ผมลองทำใน Query  
Age: Format([MyDate],"dd/mm/yyyy") -Format([dbo_Dbopen].[datum],"dd/mm/yyyy") 
แล้วมันขึ้น #ERROR 
ลอง ลบกันเฉย ๆ แบบ MyDate - [dbo_Dbopen].[datum] มันก็ขึ้น Error เหมือนกันครับ  
ถ้าทำใน Query ไม่ได้ เราไปทำที่ Report ได้ไม๊ครับ  ผมลองทำใน Report มันก็ Error  
อาจจะเป็นเพราะว่าผมอ้างอิงค่าไม่เป็นครับ คือผมเขียนแบบนี้ครับ 
 
Private Sub Report_Open(Cancel As Integer) 
Dim Message, Title, Default, MyValue, CompareDate 
Dim TheDate As Date     
Dim Msg 
Message = "Enter date of aging "     
Title = "Date of Aging Entry "    
Default = Date       
' Display message, title, and default value. 
MyValue = InputBox(Message, Title, Default) 
Reports!DebtorAging!LblAge.Caption = MyValue 
TheDate = Reports!DebtorAging!TxtDatum.Text        ******  ผิดตรงนี้ครับ ***** จุดประสงค์คือจะเอาค่าใน datum เช่น  
 
                                                                                     ****** 26/07/2001 มาหาวันกับ MyValue ที่เราใส่ไว้ตอนแรก **** 
Msg = "Age: " & DateDiff("d", MyValue, TheDate) 
MsgBox Msg 
End Sub 
 
หลังจากที่แก้โจทย์นี้ได้แล้ว อีก 1 โจทย์คือ 
ผมต้องการที่จะคำนวณ โดยการบวก Credit Term เข้าไปอีก 120 วัน แต่ต้องการนับจาก  
End of Month เช่น วันที่ใน datum เป็น 26/07/2001  (ต้องให้มันรู้เองว่าเป็นสิ้นเดือนคือ 31/07/2001 แล้ว บวกไปอีก 120  
 
วันก็จะเป็น  28/11/2001 ) 
 
ผมควรจะทำใน Query แล้วค่อย ออก Report หรือว่าทำใน Report เลยครับ  
 
 

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

1 @R00861
ลองดู Funtion ที่ อ.สุภาพ แนะนำผม แล้วลองดัดแปลงดูนะครับ --------------------------------------------------------------------------- Function CalAgeYMD2(BDate As Date) Dim intYear As Integer Dim intMonth As Integer Dim intDay As Integer If BDate < Now() Then intMonth = DateDiff("m", BDate, Now()) intDay = DateDiff("d", DateAdd("m", intMonth, BDate), Now()) If intDay < 0 Then intMonth = intMonth - 1 intDay = DateDiff("d", DateAdd("m", intMonth, BDate), Now()) End If intYear = intMonth \ 12 intMonth = intMonth Mod 12 CalAgeYMD2 = "อายุ " & intYear & " ปี " & intMonth & " เดือน " & intDay & " วัน." Else MsgBox "ยังไม่เกิดครับ" End If End Function --------------------------------------------------------------------- โดยที่ BDate = วันที่ที่คุณป้อนเข้าไป (เช่น วันเกิดของ User) Now() = วันที่ปัจจุบัน ลองดูนะครับ Suchat ชลบุรี
2 @R00862
ส่วนสูตรการบวกจำนวนวัน ให้ใช้ DateAdd() ครับ ดังนี้ ? DateAdd("d",120,#31/07/2001#) 28/11/2001
3 @R00876
เรียนอาจารย์สุภาพ หรือคุณ Suchart ครับ ถามต่อครับ คือว่า สมมุติผมมีวันที่ 20/05/2002 ผมจะทำอย่างไรให้มันไปหยุดอยู่ที่ สิ้นเดือนของทุก ๆ เดือน อย่างในคำถาม 20/05/2002 ก็ต้องให้มันเป็น 31/05/2002 Ex. ถ้าค่าเป็น 15/02/2002 ก็ให้เป็น 28/02/2002 ถ้าค่าเป็น 17/04/2002 ก็ให้เป็น 30/04/2002
4 @R00878
ใช้ DateSerial() เพื่อทำให้เป็นวันที่ 1 ของเดือนถัดไปก่อน DateSerial(Year(วันที่เป้าหมาย), Month(วันที่เป้าหมาย) + 1, 1) แล้วค่อยใช้ DateAdd() เพื่อให้เลื่อนไปข้างหน้าอีก 1 วัน ก็จะเป็นวันสิ้นเดือนของเดือนที่ได้รับมา DateAdd("d", -1, MyDate) ฟังก์ชันมีดังนี้ Function EndOfMonth(dte As Date) As Date Dim MyDate As Date MyDate = DateSerial(Year(dte), Month(dte) + 1, 1) MyDate = DateAdd("d", -1, MyDate) EndOfMonth = MyDate End Function ทดสอบจะได้ ? endofmonth(#15/02/2002#) 28/2/2545 ? endofmonth(#20/05/2002#) 31/5/2545 ? endofmonth(#17/04/2002#) 30/4/2545
5 @R00987
ตัวอย่างการคำนวณอายุอีกรูปแบบหนึ่ง ไปดูได้ที่ http://forums.compuserve.com/scripts/flisapi.dll/AGEFUNC.TXT?ViewFile&SRV=MSDevApps&FID=9183&FVF=1/.TXT ครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.0637s