Thep Excel

DATEDIFFคำนวณจำนวนช่วงเวลาระหว่างสองวันที่

DATEDIFF คำนวณจำนวนช่วงเวลา (วัน, สัปดาห์, เดือน, ปี ฯลฯ) ระหว่างสองวันที่ด้วยการนับจำนวนครั้งที่ข้ามขอบเขตของช่วงเวลา เป็นฟังก์ชันพื้นฐานสำหรับการคำนวณอายุ, ระยะเวลา, และการวิเคราะห์เวลา

fx
=DATEDIFF(<Date1>, <Date2>, <Interval>)

ความนิยม8/10
ความยาก3/10
ประโยชน์8/10

อัปเดต 13 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
Date1 DateTime วันที่เริ่มต้น (start date) สามารถเป็นคอลัมน์ที่มีค่าวันที่ หรือค่าวันที่แบบ scalar
Date2 DateTime วันที่สิ้นสุด (end date) สามารถเป็นคอลัมน์ที่มีค่าวันที่ หรือค่าวันที่แบบ scalar
Interval Text หน่วยของช่วงเวลา: SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR – ใช้เป็นข้อความอักษรพิมพ์ใหญ่ เช่น “DAY” หรือ “MONTH”

Additional Notes

DATEDIFF เป็นฟังก์ชันแกนสำคัญของ DAX ที่ช่วยให้คุณวัดระยะเวลาระหว่างวันที่สองวันได้ง่าย ๆ

ที่เจ๋งคือ DATEDIFF นับ “ขอบเขตของช่วงเวลา” ไม่ใช่ “จำนวนช่วงเวลาสมบูรณ์” ตัวอย่างเช่น ถ้าคุณเกิดวันที่ 1 มกราคม 2000 และวันนี้คือ 2 มกราคม 2000 DATEDIFF จะบอกว่าผ่านไป 1 ปี (เพราะข้ามขอบเขตปีของ 2001 แม้ว่าจะผ่านไปแค่ 1 วัน) ส่วน YEARFRAC จะบอกว่าผ่านไปประมาณ 0.003 ปี

ส่วนตัวผม ถ้าจะเก่งการคำนวณเวลาใน DAX ต้องเข้าใจความแตกต่างนี้ให้ลึกซึ้ง เพราะมันจะเปลี่ยนวิธีที่เราดำเนินการบางอย่าง เช่น การคำนวณอายุ การวิเคราะห์ระยะเวลาโครงการ และการรายงาน SLA ต้องใช้ DATEDIFF หรือ YEARFRAC นั้นขึ้นอยู่กับสิ่งที่คุณต้องการเก็บเอาไว้

How it works

คำนวณจำนวนวันระหว่างวันสั่งและวันส่ง

ใช้วัด lead time หรือ SLA

คำนวณจำนวนเดือน/ปีของช่วงเวลา

เช่น ระยะเวลาตั้งแต่เริ่มงานถึงวันนี้

Examples

ตัวอย่างที่ 1: คำนวณจำนวนวันระหว่างสองวันที่แบบ scalarDATEDIFF(DATE(2024, 1, 1), DATE(2024, 12, 31), "DAY")

คำนวณจำนวนวันระหว่าง 1 มกราคม 2024 ถึง 31 ธันวาคม 2024 ได้ 364 วัน

fx
= DATEDIFF(DATE(2024, 1, 1), DATE(2024, 12, 31), "DAY")

ผลลัพธ์364
ตัวอย่างที่ 2: คำนวณอายุจากวันเกิดมาถึงวันนี้ในหน่วยปีAge in Years = VAR BirthDate = DATE(1990, 5, 15) VAR Today = TODAY() RETURN DATEDIFF(BirthDate, Today, "YEAR")

ถ้าวันเกิดคือ 15 พฤษภาคม 1990 และวันนี้คือ 20 ธันวาคม 2024 อายุจะเป็น 34 ปี (นับจำนวนครั้งที่ข้ามขอบเขตปี)

fx
Age in Years =
VAR BirthDate = DATE(1990, 5, 15)
VAR Today = TODAY()
RETURN
DATEDIFF(BirthDate, Today, "YEAR")

ผลลัพธ์34
ตัวอย่างที่ 3: คำนวณเวลาที่ผ่านไปในหน่วยเดือน (ในคอลัมน์ที่คำนวณได้)Months Since Order = DATEDIFF([Order Date], TODAY(), "MONTH")

ในตาราง Sales ใช้คอลัมน์ Order Date และคำนวณว่าผ่านไปกี่เดือนจากวันสั่งซื้อมาถึงวันนี้ (สมมติว่าผ่านไป 3 เดือน)

fx
Months Since Order =
DATEDIFF([Order Date], TODAY(), "MONTH")

ผลลัพธ์3
ตัวอย่างที่ 4: ทดสอบว่าวันที่ใดน้อยกว่า (จำนวนเดือนติดลบ)DATEDIFF(DATE(2025, 1, 1), DATE(2024, 1, 1), "MONTH")

เมื่อ Date1 มากกว่า Date2 ผลลัพธ์จะเป็นลบ ในที่นี้ 1 มกราคม 2025 มากกว่า 1 มกราคม 2024 ดังนั้นจึงได้ -12 เดือน

fx
= DATEDIFF(DATE(2025, 1, 1), DATE(2024, 1, 1), "MONTH")

ผลลัพธ์-12
ตัวอย่างที่ 5: คำนวณหลายหน่วยพร้อมกัน (DAX table constructor){ ("Years", DATEDIFF(DATE(2020, 1, 1), DATE(2024, 12, 31), "YEAR")), ("Months", DATEDIFF(DATE(2020, 1, 1), DATE(2024, 12, 31), "MONTH")), ("Weeks", DATEDIFF(DAT…

ใช้ table constructor เพื่อคำนวณระยะเวลาระหว่าง 1 มกราคม 2020 ถึง 31 ธันวาคม 2024 ในหลายหน่วยพร้อมกัน

fx
= {
("Years", DATEDIFF(DATE(2020, 1, 1), DATE(2024, 12, 31), "YEAR")),
("Months", DATEDIFF(DATE(2020, 1, 1), DATE(2024, 12, 31), "MONTH")),
("Weeks", DATEDIFF(DATE(2020, 1, 1), DATE(2024, 12, 31), "WEEK")),
("Days", DATEDIFF(DATE(2020, 1, 1), DATE(2024, 12, 31), "DAY"))
}

ผลลัพธ์Years=4, Months=59, Weeks=260, Days=1825

FAQs

DATEDIFF แตกต่างจาก YEARFRAC อย่างไร?+

DATEDIFF นับจำนวนครั้งที่ข้ามขอบเขตของช่วงเวลา (ส่งคืนเลขจำนวนเต็ม) เช่น DATEDIFF(1/1/2000, 2/1/2000, YEAR) = 1 ปี แม้ว่าจะผ่านไป 1 เดือน ส่วน YEARFRAC จะคำนวณสัดส่วนจริง เช่น YEARFRAC(1/1/2000, 2/1/2000) = 0.083 ปี ใช้ DATEDIFF สำหรับงานคิดค้นวิยุ (เช่นอายุ) และ YEARFRAC สำหรับค่าเศษส่วน (เช่นดอกเบี้ย)

ถ้าทั้งสอง Date มีค่าเวลา (time) ด้วยจะเกิดอะไร?+

DATEDIFF จะพิจารณาเพียงส่วน "วันที่" และปฏิบัติต่อส่วน "เวลา" ว่าเป็น 00:00:00 ตัวอย่างเช่น DATEDIFF(2024/1/1 15:30:00, 2024/1/1 23:45:00, DAY) ยังคงให้ผลลัพธ์เป็น 0 เพราะอยู่ในวันเดียวกัน

สามารถใช้ DATEDIFF กับ calculated column และ measure ได้หรือไม่?+

ได้ครับ DATEDIFF ทำงานได้ดีกับทั้ง calculated column และ measure เมื่อใช้กับ calculated column มันจะมี row context ดังนั้นคุณสามารถอ้างอิงคอลัมน์ได้โดยตรง เมื่อใช้กับ measure คุณต้องใช้ CALCULATE เพื่อกำหนด filter context

ถ้า Date1 หรือ Date2 เป็น BLANK() จะเกิดอะไร?+

DATEDIFF จะส่งคืน BLANK() ถ้าข้อมูลใดข้อมูลหนึ่งเป็น BLANK() เสมอ ดังนั้นคุณต้องจัดการค่า BLANK() ไว้ล่วงหน้า เช่นใช้ IFERROR หรือ IF เพื่อให้ได้ผลลัพธ์ที่สมเหตุสมผล

ข้อมูล Interval สามารถเป็นตัวแปร (variable) ได้หรือไม่?+

ได้ครับ Interval สามารถเป็นตัวแปร (variable) ได้ เช่น VAR MyInterval = "MONTH" จากนั้น DATEDIFF(Date1, Date2, MyInterval) แต่ต้องแน่ใจว่าค่า variable เป็นข้อความที่ถูกต้อง (SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR)

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ DATEDIFF จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้DATEDIFFDate and Time
Date and Time (4)
DATE

DATE สร้างค่าวันที่จากตัวเลข Year/Month/Day แล้วคืนค่าเป็นชนิด datetime เหมาะกับการประกอบวันที่จากคอลัมน์แยกส่วนหรือสร้างวันที่อ้างอิง เช่น วันแรกของเดือน วันตัดยอด

DATEVALUE

DATEVALUE แปลงข้อความวันที่ (text) ให้เป็น datetime โดยอ้างอิงตามการตั้งค่า locale ของ model เหมาะกับข้อมูลวันที่ที่เก็บเป็นข้อความและต้องแปลงเป็นวันที่จริงเพื่อการคำนวณตามเวลา

EDATE

EDATE รับวันที่เริ่มต้นและจำนวนเดือนที่ต้องการเลื่อนไปข้างหน้า/ย้อนกลับ แล้วคืนวันที่ใหม่ที่รักษาวันเดิม (หรือวันสุดท้ายของเดือนถัดไปถ้าวันเดิมเกิน) เหมาะสำหรับวันครบกำหนดชำระ บันทึกงวด และตารางผ่อน

YEARFRAC

YEARFRAC คืนค่าสัดส่วนของปีระหว่าง StartDate และ EndDate โดยเลือกวิธีนับวัน (Basis) ได้ เหมาะกับการวัดช่วงเวลาที่ต้องการผลลัพธ์เป็นจำนวนปีแบบทศนิยม

Time Intelligence (1)
FIRSTDATE

FIRSTDATE คืนค่าวันที่แรกในบริบทตัวกรองปัจจุบัน เหมาะใช้เป็นตัวกรองให้ CALCULATE เพื่อหายอดขาย/จำนวนของวันแรกในช่วงที่เลือก

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่