คนเขียนโปรแกรมมีปัญหาเรื่องจำนวนวันใน 1ปี


0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

16 เม.ย. 65 , 20:16:53
อ่าน 280 ครั้ง

kunlek

ถ้าเดือน กพ มี28 วันจำนวนวันใน 1ปี=365 เช่นปี 2564 แต่ ปี 2563  2565 จำนวนวัน 366 วัน ใช้access ทำให้หาอายุทรัพย์สินคลาดเคลื่อน 1 วัน อยากทราบว่าปกติเลือกแก้ปัญหานี้อย่างไรกันครับ

 

16 เม.ย. 65 , 21:41:10
ตอบกลับ #1

UnKnown

ผมไปทดลองหาผลลัพธ์เป็นจำนวนวันก็เอาวันที่มาคำนวนได้ผลตรงนะครับ เช่น
1/1/22 - 1/1/21 = 365
1/1/21 - 1/1/20 = 366
1/1/22 - 1/1/20 = 731
:ninja:     ลองคิด,ลองทำแนวคนไม่เก่งแอคเซส
หมายเหตุ เพื่อความปลอดภัยโปรดสำรองข้อมูลใว้ก่อนการแก้ไข
 

16 เม.ย. 65 , 22:03:20
ตอบกลับ #2

OddyWriter

ก็เหมือนการนับอายุของเราน่ะครับ

ถ้าเกิดวันที่ 1 กุมภาพันธ์ ก็นับครบปี วันที่ 1 กุมภาพันธ์ปีถัดไป หรือ 31 มกราคม ปีเดียวกัน

โดยเงื่อนไขการครบปีก็ต้องถามผู้ใช้ว่า เค้าคิดครบปีอย่างไร วันเดียวกันของปีถัดไป หรือก่อนหน้า 1 วัน

อย่าไปคิด 365-366 วันครับ
วิกฤติโควิดทำให้ร้อนเงิน
ใครอยากจ้างทำฐานข้อมูล สอนวางระบบฐานข้อมูล Excel/ Access/ VBA Excel/ VBA Access/ SQL Server/ Database Design
แม้กระทั่งดูดวง ก็ติดต่อได้นะครับ
 

17 เม.ย. 65 , 22:09:44
ตอบกลับ #3

nonc31

Public Function AgeYe(db, dN) As Integer  'หาอายุปี
    If Day(dN) >= Day(db) Then
        If Month(dN) >= Month(db) Then
            AgeYe = Year(dN) - Year(db)
        Else
            AgeYe = Year(dN) - Year(db) - 1
        End If
    Else
        If (Month(dN) - 1) >= Month(db) Then
            AgeYe = Year(dN) - Year(db)
        Else
            AgeYe = Year(dN) - Year(db) - 1
        End If
    End If
End Function

Public Function AgeMo(db, dN) As Integer  'หาอายุเดือน
    If Day(dN) >= Day(db) Then
        If Month(dN) >= Month(db) Then
            AgeMo = Month(dN) - Month(db)
        Else
            AgeMo = Month(dN) + 12 - Month(db)
        End If
    Else
        If (Month(dN) - 1) >= Month(db) Then
            AgeMo = Month(dN) - 1 - Month(db)
        Else
            AgeMo = Month(dN) - 1 + 12 - Month(db)
        End If
    End If
End Function

Public Function AgeDa(db, dN) As Integer  'หาอายุวัน  ยืมวันกรณีวันที่น้อย
    Dim mon As Integer
        mon = Month(dN)
      Select Case mon
             Case 1, 3, 5, 7, 8, 10, 12
                jnM = 31
             Case 2
                If Year(dN) Mod 4 = 0 Then  'ก.พ. 4 ปีมี 1 ครั้งที่มี 29วัน
                    jnM = 29
                Else
                    jnM = 28
                End If
             Case Else
                jnM = 30
      End Select

    If Day(dN) >= Day(db) Then
        AgeDa = Day(dN) - Day(db)
    Else
        AgeDa = Day(dN) + jnM - Day(db)
    End If
End Function

ปล.  db คือ วันเกิด    dN คือ วันที่ ณ ต้องการคำนวณ
« แก้ไขครั้งสุดท้าย: 17 เม.ย. 65 , 23:05:44 โดย nonc31 »

 

25 เม.ย. 65 , 21:49:18
ตอบกลับ #4

kunlek

ถ้าวันที่วันนี้คือ date()  แต่ถ้าจะเขียนเป็นปีนี้...? ต้องเขียนอย่างไรครับ

 

26 เม.ย. 65 , 10:38:24
ตอบกลับ #5

OddyWriter

ํyear(date())
วิกฤติโควิดทำให้ร้อนเงิน
ใครอยากจ้างทำฐานข้อมูล สอนวางระบบฐานข้อมูล Excel/ Access/ VBA Excel/ VBA Access/ SQL Server/ Database Design
แม้กระทั่งดูดวง ก็ติดต่อได้นะครับ
 

27 เม.ย. 65 , 21:13:39
ตอบกลับ #6

kunlek

year(date()) ได้ผลลัพธ์ 2022  ถ้าจะให้เป็น 2565 ใช้ฟังก์ชั่นอะไร ครับ หรือเขียนเพิ่ม year(date())+543 

 

27 เม.ย. 65 , 21:39:27
ตอบกลับ #7

OddyWriter

ใช่ครับ +543
วิกฤติโควิดทำให้ร้อนเงิน
ใครอยากจ้างทำฐานข้อมูล สอนวางระบบฐานข้อมูล Excel/ Access/ VBA Excel/ VBA Access/ SQL Server/ Database Design
แม้กระทั่งดูดวง ก็ติดต่อได้นะครับ
 

28 เม.ย. 65 , 08:03:38
ตอบกลับ #8

kunlek

ขอบคุณครับ

 


บอร์ดเรียนรู้ Access สำหรับคนไทย