fromis_9/backend/lib/date.js

86 lines
2 KiB
JavaScript
Raw Normal View History

/**
* 날짜/시간 유틸리티 (dayjs 기반)
* 백엔드 전체에서 공통으로 사용
*/
import dayjs from "dayjs";
import utc from "dayjs/plugin/utc.js";
import timezone from "dayjs/plugin/timezone.js";
import customParseFormat from "dayjs/plugin/customParseFormat.js";
// 플러그인 등록
dayjs.extend(utc);
dayjs.extend(timezone);
dayjs.extend(customParseFormat);
// 기본 시간대: KST
const KST = "Asia/Seoul";
/**
* UTC 시간을 KST로 변환
* @param {Date|string} utcDate - UTC 시간
* @returns {dayjs.Dayjs} KST 시간
*/
export function toKST(utcDate) {
return dayjs(utcDate).tz(KST);
}
/**
* 날짜를 YYYY-MM-DD 형식으로 포맷
* @param {Date|string|dayjs.Dayjs} date - 날짜
* @returns {string} YYYY-MM-DD
*/
export function formatDate(date) {
return dayjs(date).format("YYYY-MM-DD");
}
/**
* 시간을 HH:mm:ss 형식으로 포맷
* @param {Date|string|dayjs.Dayjs} date - 시간
* @returns {string} HH:mm:ss
*/
export function formatTime(date) {
return dayjs(date).format("HH:mm:ss");
}
/**
* UTC 시간을 KST로 변환 날짜/시간 분리
* @param {Date|string} utcDate - UTC 시간
* @returns {{date: string, time: string}} KST 날짜/시간
*/
export function utcToKSTDateTime(utcDate) {
const kst = toKST(utcDate);
return {
date: kst.format("YYYY-MM-DD"),
time: kst.format("HH:mm:ss"),
};
}
/**
* 현재 KST 시간 반환
* @returns {dayjs.Dayjs} 현재 KST 시간
*/
export function nowKST() {
return dayjs().tz(KST);
}
/**
* Nitter 날짜 문자열 파싱 (UTC 반환)
* : "Jan 9, 2026 · 4:00 PM UTC" Date 객체
* @param {string} timeStr - Nitter 날짜 문자열
* @returns {dayjs.Dayjs|null} UTC 시간
*/
export function parseNitterDateTime(timeStr) {
if (!timeStr) return null;
try {
const cleaned = timeStr.replace(" · ", " ").replace(" UTC", "");
const date = dayjs.utc(cleaned, "MMM D, YYYY h:mm A");
if (!date.isValid()) return null;
return date;
} catch (e) {
return null;
}
}
export default dayjs;