Blog About
Table of Contents
  • เนื้อหา
  • ปัญหาตอนใช้ momentjs
  • dayjs
  • ขนาดของ package

เปลี่ยนจาก moment เป็น dayjs แทนเถอะ

Apisit N.
15 Nov 2022

จัดการเรื่องเวลาตอนเขียนโปรแกรมกันยังไงกันบ้าง เดิมทีแล้ว javascript ก็มีฟังก์ชันให้เรียกใช้ด้วยคำสั่ง new Date() อยู่แล้วแต่ก็ไม่ค่อยได้ใช้ เพราะตอนใช้งานจริงเราใช้ library หรือ package ที่เป็นที่นิยมกันน่าจะดีกว่า รูปแบบคำสั่งหรือ syntax จะได้ดูเป็นมาตรฐานหน่อยใครมาอ่านก็เข้าใจได้เร็ว ส่วนใหญ่จะใช้เพื่อจัด format YYYY-MM-DD และตั้ง timezone บ่อยมากๆ เพราะเวลาที่เก็บลงใน database เรามักจะเก็บเป็น UTC แต่เวลานำไปใช้แสดงผลเราจะเปลี่ยนไปตาม timezone ของผู้ใช้เช่นของไทยก็จะ UTC +7

เนื้อหา

  • เนื้อหา
  • ปัญหาตอนใช้ momentjs
  • dayjs
  • ขนาดของ package

ปัญหาตอนใช้ momentjs

1
const moment = require("moment");
2
3
const momentNow = moment();
4
console.log("momentNow: ", momentNow.format("YYYY-MM-DD HH:mm:ss"));
5
const momentStartDate = momentNow.startOf("day");
6
console.log("momentStartDate: ", momentStartDate.format("YYYY-MM-DD HH:mm:ss"));
7
const momentEndDate = momentNow.endOf("day");
8
console.log("momentEndDate: ", momentEndDate.format("YYYY-MM-DD HH:mm:ss"));
Terminal window
1
momentNow: 2022-11-14 21:07:54
2
momentStartDate: 2022-11-14 00:00:00
3
momentEndDate: 2022-11-14 23:59:59

จากที่เห็นมันก็ดูปกติดีไม่มีปัญหาอะไร ทีนี้มาลองอีกแบบลองย้าย console.log มาไว้ท้ายสุดให้หมดแล้วดูผลลัพธ์กัน

1
const moment = require("moment");
2
3
const momentNow = moment();
4
const momentStartDate = momentNow.startOf("day");
5
const momentEndDate = momentNow.endOf("day");
6
console.log("momentNow: ", momentNow.format("YYYY-MM-DD HH:mm:ss"));
7
console.log("momentStartDate: ", momentStartDate.format("YYYY-MM-DD HH:mm:ss"));
8
console.log("momentEndDate: ", momentEndDate.format("YYYY-MM-DD HH:mm:ss"));
Terminal window
1
momentNow: 2022-11-14 23:59:59
2
momentStartDate: 2022-11-14 23:59:59
3
momentEndDate: 2022-11-14 23:59:59

สิ่งที่ได้ของ moment ก็ตามนี้เลย เวลามันเหมือนกันเฉยเลย สิ่งที่คาดหวังก็คือ

  • momentNow ควรจะได้เวลา ณ ปัจจุบัน
  • momentStartDate ควรจะเป็น วันปัจจุบันแล้วได้เวลาคือ 2022-11-14 00:00:00
  • momentEndDate ถูกแล้ว ได้ตามที่ต้องการ

พอเห็นปัญหาแล้วใช่ไหม ลองคิดดูว่าถ้าเราเอาไปใช้ query ข้อมูลที่เป็นช่วงเวลาด้วยคำสั่ง sql BETWEEN ดู ได้ข้อมูลมาไม่ครบแน่ๆ

dayjs

ทีนี้ลองมาดู dayjs กันบ้าง เขียนเหมือนกันเลยแค่ไม่ใช่ moment เท่านั้นเอง

1
const dayjs = require("dayjs");
2
3
const dayjsNow = dayjs();
4
const dayjsStartDate = dayjsNow.startOf("day");
5
const dayjsEndDate = dayjsNow.endOf("day");
6
console.log("dayjsNow: ", dayjsNow.format("YYYY-MM-DD HH:mm:ss"));
7
console.log("dayjsStartDate: ", dayjsStartDate.format("YYYY-MM-DD HH:mm:ss"));
8
console.log("dayjsEndDate: ", dayjsEndDate.format("YYYY-MM-DD HH:mm:ss"));
9
10
console.log("dayjsNow: ", dayjsNow.format("YYYY-MM-DD HH:mm:ss"));
Terminal window
1
dayjsNow: 2022-11-14 21:33:52
2
dayjsStartDate: 2022-11-14 00:00:00
3
dayjsEndDate: 2022-11-14 23:59:59
4
dayjsNow: 2022-11-14 21:33:52

จากที่เห็นคือได้ตามที่ต้องการเลย

  • dayjsNow ได้เวลา ณ ปัจจุบัน
  • dayjsStartDate ได้เวลาเริ่มต้น ของวันปัจจุบัน
  • dayjsEndDate ได้เวลาสุดท้าย ของวันปัจจุบัน
  • dayjsNow ลองแสดงให้ดูอีกทีว่ามันดีกว่าจริงๆ

ขนาดของ package

dayjs มีขนาดเล็กกว่ามาก

package sizing of Dayjs and Moment

© 2025 Apisit N.