diff() หาช่วงห่างระหว่าง DateTime object สองตัว โดย return Duration object ที่บอกจำนวนวัน ชั่วโมง นาที หรือวินาที ที่ต่างกัน เหมาะสำหรับคำนวณอายุ ระยะเวลาจัดส่ง เวลาที่ผ่านไป หรือสร้าง SLA calculation ในงาน automation
={{ $json.date1.diff($json.date2, 'unit') }}
={{ $json.date1.diff($json.date2, 'unit') }}
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| otherDate | DateTime | Yes | DateTime object ที่ต้องการเปรียบเทียบ ต้องเป็น DateTime object (แปลงจาก string ด้วย toDateTime() ก่อนถ้าจำเป็น) | |
| unit | string | Optional | หน่วยเวลาที่ต้องการ เช่น ‘days’, ‘hours’, ‘minutes’, ‘seconds’, ‘milliseconds’ ถ้าไม่ระบุจะ return Duration object |
General usage
{{ toDateTime('2024-12-25').diff(toDateTime('2024-12-18'), 'days') }}={{ toDateTime('2024-12-25').diff(toDateTime('2024-12-18'), 'days') }}
7
{{ $now.diff(toDateTime($json.startTime), 'hours') }}={{ $now.diff(toDateTime($json.startTime), 'hours') }}
5
{{ toDateTime('2024-12-25 14:30:00').diff(toDateTime('2024-12-18 10:15:00')) }}={{ toDateTime('2024-12-25 14:30:00').diff(toDateTime('2024-12-18 10:15:00')) }}
{"days": 7, "hours": 4, "minutes": 15, "seconds": 0}
{{ { ageMins: $now.diff(toDateTime($json.createdAt), 'minutes'), ageHours: $now.diff(toDateTime($json.createdAt), 'hours'), isBreached: $now.diff(toDateTime($js…={{ {
ageMins: $now.diff(toDateTime($json.createdAt), 'minutes'),
ageHours: $now.diff(toDateTime($json.createdAt), 'hours'),
isBreached: $now.diff(toDateTime($json.createdAt), 'hours') > 24
} }}
{
ageMins: 180,
ageHours: 3,
isBreached: false
}
{{ { daysOld: $now.diff(toDateTime($json.manufacturingDate), 'days'), needsRestock: $now.diff(toDateTime($json.manufacturingDate), 'days') > 90 } }}={{ {
daysOld: $now.diff(toDateTime($json.manufacturingDate), 'days'),
needsRestock: $now.diff(toDateTime($json.manufacturingDate), 'days') > 90
} }}
{
daysOld: 45,
needsRestock: false
}
สองฟังก์ชันนี้ใช้งานต่างกันนะครับ 😎
.
• diff() = หาผลต่างระหว่าง 2 วันที่ แล้ว return Duration object (บอกว่า “ต่างกัน 7 วัน”)
• minus() = ลบระยะเวลาออกจาก DateTime แล้ว return DateTime object ใหม่ (บอกว่า “7 วันก่อนคือวันนั้น”)
.
ง่ายๆ:
– diff() = นำเอา subtraction → บอกผลลัพธ์เป็นตัวเลข
– minus() = subtraction คำนวณ → บอกวันที่ใหม่
รองรับ ‘days’, ‘hours’, ‘minutes’, ‘seconds’, ‘milliseconds’, ‘weeks’, ‘months’, ‘quarters’, ‘years’ ครับ
.
⚠️ ข้อควรระวัง: ใช้หน่วยในรูปแบบ singular (เช่น ‘day’ ไม่ได้ ต้อง ‘days’)
.
ผมแนะนำใช้ ‘days’, ‘hours’, ‘minutes’ มากที่สุดครับ เพราะเข้าใจง่าย เมื่อใช้ ‘months’ หรือ ‘years’ ต้องระวัง ลบั้นเดือนจำนวนวันไม่เท่ากัน 💡
ได้เลยครับ ถ้าวันแรกเก่ากว่าวันที่สอง ผลลัพธ์จะเป็นลบ
.
ตัวอย่าง: toDateTime(‘2024-12-10’).diff(toDateTime(‘2024-12-20’), ‘days’) = -10
.
แสดงว่า 2024-12-10 นั้นย้อนหลัง (เก่า) 10 วัน จากวันที่ 2024-12-20 ส่วนตัวผมใช้ค่าลบนี้เพื่อตรวจสอบทิศทาง ว่า วันแรกมาหรือวันที่สอง 😎
Duration object มี properties ตามหน่วยเวลาต่างๆ เช่น:
.
{ “milliseconds”: 0, “seconds”: 0, “minutes”: 15, “hours”: 4, “days”: 7, “weeks”: 1, “months”: 0, “years”: 0 }
.
สามารถเข้าถึง individual unit ได้ เช่น myDuration.days, myDuration.hours
.
ตัวอย่างเช่น:
const dur = toDateTime(‘2024-12-25’).diff(toDateTime(‘2024-12-18’))
dur.days = 7
dur.hours = 0
dur.minutes = 0
.
เอาจริงๆ นะครับ ถ้าต้องแยก breakdown ก็ปล่อย unit เปล่า return Duration object แล้ว access properties 💡
ใช่ครับ Luxon คำนวณ DST โดยอัตโนมัติ
.
ถ้าเกิด DST changeover (เปลี่ยนเวลาเนื่องจาก DST) ระหว่างสองวันที่ diff() ก็จะคำนวณ adjustment เองให้ ไม่ต้องห่วง ผมเคยเจอปัญหาเรื่อง DST ตอนทำ workflow ตามธุรกิจ US timezone เลย รู้ว่า Luxon ดูแล 😎
ไม่ได้ครับ diff() ใช้กับ DateTime object เท่านั้น
.
ถ้า $json.field เป็น string ต้องแปลง string เป็น DateTime object ก่อนด้วย toDateTime() เช่น:
toDateTime($json.date1).diff(toDateTime($json.date2), ‘days’)
.
ผมแนะนำให้จำกฎง่ายๆ นี้ไว้: String → toDateTime() → diff() 💡
ใช้บ่อยในหลายจุดครับ 😎
.
• SLA tracking: ตรวจสอบว่า ticket หรือ task ฝ่า SLA หรือไม่
• Lead time calculation: คำนวณเวลาจากเริ่มต้นถึงสิ้นสุด order
• Age calculation: หาอายุของ record, ticket, order ฯลฯ
• Time tracking: track เวลาที่ใช้ในแต่ละ phase
• Inventory: ตรวจสอบว่าสินค้าเก่ากี่วัน ต้อง restock หรือไม่
• Payment reminder: คำนวณว่า invoice เก่ากี่วัน ต้อง reminder หรือไม่
.
ส่วนตัวผมใช้ SLA tracking กับ lead time calculation บ่อยสุด ครับ
diff() เป็น method ของ Luxon DateTime ที่ใช้คำนวณช่วงห่างระหว่าง DateTime object สองตัวครับ
ตัวอย่างเช่น ถ้าต้องหา “วันนี้ห่างจากวันเกิดกี่วัน” หรือ “จาก order ที่สั่งไปถึงการส่ง ใช้เวลากี่ชั่วโมง” diff() ก็เข้ามาช่วยได้เลย 😎
ที่เจ๋งคือ diff() return Duration object ที่มี properties เช่น days, hours, minutes, seconds เราสามารถเลือกว่าต้องการรู้ผลต่างในหน่วยไหน (days, hours, minutes, seconds, milliseconds) ได้เลย
ส่วนตัวผมใช้ diff() บ่อยมากตอนทำ workflow automation ที่ต้อง calculate lead time, SLA compliance, หรือ time tracking ครับ 💡