พอดีได้มีโอกาสทำ Report ตัวนึง แล้วทาง PM อยากได้ข้อมูล Week ของวันที่ที่ระบุว่าเป็น Week ที่เท่าไหร่ จึงเกิดบทสนทนานี้ขึ้นมา
ME : ข้อมูล Week นี้ อยากเห็นเป็นมุมมอง “Week of Year” หรือ “Week of Month” นะครับ
PM: จริงๆอยากได้เป็นแบบ “Week of Month” นะ แต่ไม่ซีเรียสนะ . . .
(ไม่ซีเรียส = มีก็ดี ฮ่าๆๆ)
หลังจากลอง คิด + ค้นหา เพื่อดูว่าที่เราคิดเนี่ยมันถูกใช่มั้ย
เลยมาเขียนเป็นบทความเก็บเอาไว้ เผื่อเป็นหนึ่งในตัวที่ช่วยคนอื่นๆ ได้สืบต่อไป. . .
เข้าเรื่องกันเลยดีกว่า
ในบทความนี้เราก็จะใช้เจ้า JS (Javascript) เป็นหลักนะครับ
การทำงานของ Function มีเพียงแค่
- รับวันที่เข้ามา [Input Date]
- ส่งกลับออกไปว่า เป็น Week ที่เท่าไหร่ของเดือน (Week of the month) [Return WeekNumber]
หน้าตา Function ก็จะประมาณนี้
โดยเราจะเริ่มนับวันแรกของ week คือ วันจันทร์ และ สิ้นสุดที่ วันอาทิตย์
Let’s start coding.
Line 3 : แปลงค่าที่รับมาให้เป็น Date format เสียก่อน
Line 4 : หาว่าวันแรกของเดือนเป็นวันอะไร [Sun — Sat] (getDay() จะได้ค่าออกมาเป็น 0–6 )
Line 6 : เอาเฉพาะค่าวันที่ [date.getDate()] มาบวกกับวันแรกของเดือน-1 [firstDayOfMonth-1]แล้ว นำทั้งหมดมา หาร 7
จากนั้นใช้ Math.ceil() มาครอบ เพื่อปัดเศษจากค่าที่ได้ขึ้น เช่นได้ออกมา 0.12 => 1
จบ!! เรียบร้อย ไปดูตัวอย่างกัน
ตัวอย่าง
เราต้องการหาวันที่ 2022–10–03 ว่าอยู่ในสัปดาห์ที่เท่าไหร่ของเดือน ?
- หาว่าวันเริ่มต้นของเดือนเป็นวันอะไร : 2022–10–01 = วันเสาร์ [วันเสาร์ = 6]
ที่นี้เราจะได้ค่า
- 3 = วันที่ที่ต้องการหา (03)
- 6 = เลขระบุ ตำแหน่งของวันเสาร์
- 7 = จำนวนวันใน 1 สัปดาห์
- 1 = ค่าตายตัวเอาไว้ให้เริ่มต้นสัปดาห์เป็นวันจันทร์
- เอามาแทนค่า (3+(6–1)) / 7 = 1.14285714
- ทีนี้เราก็เอา Math.ceil(1.14285714) = 2
คำตอบ วันที่ 2022–10–03 อยู่ในสัปดาห์ที่ 2 ของเดือน
สรุป
ในบางครั้งบางงานเราอาจจะต้องการมุมมองของ Report ที่ต่างไปจากเดิมหรือ Report ที่เน้นดูในเชิงรายสัปดาห์(week) ก็หวังว่าบทความนี้จะเป็นอีกหนึ่งตัวช่วยสำหรับทุกคน
Demo > ClickMe
สำหรับบทความนี้ หากมีข้อผิดพลาดประการใดก็ขออภัยมา ณ ที่นี้ด้วย หรือท่านใดมีคำถาม หรือข้อเสนอแนะเพิ่มเติม ใส่ไว้ที่ Comment ได้เลยนะฮะ
Ref.