กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
568 4
URL.หัวข้อ /
URL
ต้องการทราบวิธีการคำนวณอายุ(yy:mm)
ผมใช้วิธี วันเดือนปีเกิด-Now() แล้ว ปรากฏว่าบางข้อมูลจะได้เป็น 20:12 ( 20 ปี 12 เดือน) ซึ่งความจริงน่าจะได้ผลลัพธ์เป็น 21 ปี
ขอรบกวนท่านผู้รู้ช่วยบอกวิธีแก้ไขด้วยครับ
ขอรบกวนท่านผู้รู้ช่วยบอกวิธีแก้ไขด้วยครับ
4 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R00771
ครับ ถ้าใช้ วิธีลบดื้อแบบนี้ก็เจอปัญหาแบบนี้แหละครับ ผมเองก็เคยเจอครับ โดยทั่วๆไปถ้าใช้วิธีลบแบบนี้แล้วไม่ได้ set format อะไร จะหมายถึง ได้ผลลัพท์ออกมาเป็นจำนวนวันครับ เช่น 1 ปีมี 365 วัน ถ้าลบได้กี่ปีก็คุณเข้าไปจะได้ผลลัพท์ออกมาเป็จำนวนวันครับ
ผมเคยคำนวณโดย ได้จำนวนวันออกมาเท่าไร ก็หารด้วย 365 เอาแต่จำนวนเต็มออกมาเป็นจำนวนปีครับ (ใช้ฟังก์ชันอะไร เป็นโจทย์ให้คิดครับ !) ที่เหลือเศษจำนวนวันก็หารด้วย 30 เป็นจำนวนเดือนครับ(ใช้ฟังก์ชันอะไร เป็นโจทย์ให้คิดครับ !) เหลือเศษเท่าไร ก็จะเป็นจำนวนวันครับ
..แต่จะยังไม่ตรงเท่าไรครับ เพราะไม่ได้คิดเรื่อง ปีอธิกสุรทิน คือ 4 ปีจะมีเดือน ก.พ. = 28 วัน จึงทำให้ไม่ค่อยตรงเท่าไร ส่วนการ Code ด้วยวิธีอื่นๆ ผมยังไม่เคยทดสอบดูว่าคำนวณตรงรึป่าว ก็ขึ้นอยู่กับผู้ใช้ว่าข้อมูลส่วนนี้มีความสำคัญมากแค่ไหน(ถ้าเกี่ยวกับการคำนวณดูดวงชะตา อาจจะมีความสำคัญมาก็ได้ครับ)
2 @R00772
ให้คำนวณเป็นเดือนก่อนโดยใช้ DateDiff
intMonth = DateDiff("m", BDate, Now())
แล้วค่อยหาเป็นปี
intYear = intMonth \ 12
และเดือน
intMonth = intMonth Mod 12
ครับ
3 @R00777
ผมนำ 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
ขอบพระคุณ ความรู้ดีๆ จาก อ.สุภาพ ครับ
ขอบพระคุณครับ
Suchat
ชลบุรี
4 @R00798
กระจ่างครับ..ขอบพระคุณทุกท่านครับ
Time: 0.1221s