요구사항
년, 월을 입력받으면 입력받은 월에 해당하는 1~말일에 해당하는 레코드를 필터링하고 싶었다.
코드를 작성하고 11월을 선택하고 필터링하니 10월31일부터 조회되는 문제가 발생했다.
문제사항
바로 해보면 아는데, JS에서 기본적으로 리턴해주는 현재 시각은 localtime이고
string으로 변환시킨 시각은 UTC 기준이다.
그래서 9시간의 차이가 난다.
해결방법
dayjs 패키지를 사용해서 현재시간을 리턴하는 코드를 작성했다.
그래서 년, 월을 입력받으면 입력받은 월에 해당하는 1~말일에 해당하는 레코드를 필터링했다.
## dayjsConfig.ts
import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone';
dayjs.extend(utc);
dayjs.extend(timezone);
dayjs.tz.setDefault('Asia/Seoul');
export default dayjs; // dayjs를 기본 내보내기로 설정
해당 코드를 매번 작성하기는 귀찮으니 모듈화시켰다.
import dayjs from '~/libs/dayjsConfig';
let startOfThisMonth: dayjs.Dayjs;
let endOfThisMonth: dayjs.Dayjs;
if (year && month !== undefined) {
startOfThisMonth = dayjs()
.year(year)
.month(month - 1)
.date(1)
.startOf('month'); // 해당 월의 1일 00:00:00
endOfThisMonth = dayjs(startOfThisMonth)
.endOf('month') // 해당 월의 마지막 날 23:59:59
.add(1, 'second');
queryBuilder = queryBuilder.andWhere('announce.createdAt BETWEEN :begin AND :end', {
begin: startOfThisMonth.format(),
end: endOfThisMonth.format(),
});
}
위처럼 1일과 마지막일에 해당하는 레코드를 필터링해서 리턴했다.
참고
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toUTCString
'JaveScript > JaveScript' 카테고리의 다른 글
모던자바스크립트 11, 12장 스터디 (0) | 2023.11.18 |
---|---|
모던 자바스크립트 9, 10장 스터디 (0) | 2023.11.17 |
왜 NaN === NaN 는 false이고 0 === -0은 true 일까? (0) | 2023.11.16 |
null과 undefined의 차이 (0) | 2023.11.15 |
자바스크립트에서 세미콜론은 필수인가? (0) | 2023.11.13 |