1 คะแนน โดย flyingsquirrel 5 시간 전 | ยังไม่มีความคิดเห็น | แชร์ทาง WhatsApp

มีบางครั้งที่อยากใส่ไลบรารีวันที่ แต่ไม่ได้ต้องการทุกอย่างครบทั้ง locale/timezone/duration/plugin

date-light คือไลบรารียูทิลิตีวันที่ขนาดเล็กที่สร้างมาเพื่อแก้ปัญหานี้ โดยคัดเฉพาะงานเกี่ยวกับวันที่ที่ใช้บ่อยบนเว็บ/แอปมาให้ในรูปแบบ 39 ฟังก์ชัน ไม่มี runtime dependency และมีทั้ง TypeScript types กับ ESM/CJS entry points

import { addDays, differenceInDays, format, startOfWeek } from "date-light";  
  
const launch = new Date(2026, 5, 30, 14, 30);  
const reminder = addDays(launch, -7);  
  
format(launch, "yyyy-MM-dd HH:mm"); // "2026-06-30 14:30"  
format(startOfWeek(launch), "yyyy-MM-dd"); // "2026-06-29"  
differenceInDays(launch, reminder); // 7  

มีอะไรให้บ้าง

format, parseISO, parse

addDays, addMonths, addYears, addHours, subDays, subMonths...

differenceInDays, differenceInMonths, differenceInYears

isBefore, isAfter, isEqual, isSameDay, isSameMonth

isWeekend, isLeapYear, isValid, getDaysInMonth

startOfDay, endOfWeek, startOfMonth, endOfYear เป็นต้น

Date ที่ป้อนเข้าไปจะไม่ถูกแก้ไข ทุกฟังก์ชันจะคืนค่า Date ใหม่หรือคำนวณค่าออกมา

ทำไมถึงสร้างมันขึ้นมา

แอปส่วนใหญ่ใช้เพียงส่วนเล็กมากของไลบรารีวันที่เท่านั้น

โดยทั่วไปก็แค่ฟอร์แมตวันที่, parse สตริง ISO, บวกเพิ่มอีกไม่กี่วัน, หาความต่างระหว่างสองวันที่, แล้วจัดให้ตรงกับจุดเริ่มต้นและจุดสิ้นสุดของสัปดาห์/เดือน/ปี

date-light เลือกจะโฟกัสเฉพาะขอบเขตนี้ ให้ประสบการณ์การใช้งานคล้าย date-fns แต่รวมมาเฉพาะยูทิลิตีที่ใช้บ่อย

สิ่งที่ตั้งใจไม่ใส่มา

ไม่มี locale, timezone DB, duration object, plugin หรือ chaining API

ถ้าต้องการความสามารถเหล่านี้ Intl, Temporal, Luxon หรือ date-fns จะเหมาะกว่า ส่วน date-light เป็นเครื่องมือสำหรับเวลาที่อยากได้แค่การจัดการวันที่ทั่วไปในแอปแบบเล็กกระทัดรัด

ขนาด

ประมาณ 3.11KB แบบ minzipped สำหรับ 39 ฟังก์ชัน

ตามเกณฑ์เปรียบเทียบ bundle size ในเอกสาร ระบุว่าหากดึงฟังก์ชันใกล้เคียงกัน 20 ตัวจาก date-fns จะมีขนาดเล็กกว่าประมาณ 5.9 เท่า

GitHub: https://github.com/flyingsquirrel0419/date-light
npm: npm install date-light
docs/playground: https://date-light.flyingsquirrel.me/

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น