getDate, getMonth 등으로 월이나 일을 구할 수는 있지만

특정 기간, 즉 시작날짜와 끝날짜를 입력하고 

일별 or 주별 or 월별을 선택 했을 때 그 사이의 시작날짜와 끝날짜를 반환하는 함수는 찾기 힘들었다. 

(어쩌면 내가 못찾고 하드코딩 한걸수도..?)

용도는 charts.js를 사용하기 위해서다. 

날짜로 범위를 걸어서 일별 데이터를 보거나 월별 데이터를 보는 화면을 제작해야 했다.

 

startDate <- 0월24일

endDate <- 3월15일

term <- 2

을 하면 1월24일부터 4월15일까지

주 단위로 (첫째날 포함) 기간이 나뉘어진 것이 returnData로 반환된다.

 

returnData

 

 

/* eslint-disable no-console */
const mongoose = require('mongoose');
const objectId = mongoose.Types.ObjectId;

function dateToObjectIdConvert (dateTime) {
	return objectId(Math.floor(dateTime / 1000).toString(16) + '0000000000000000');
};

function objectIdToDateConvert (objectId) {
	return new Date(parseInt(String(objectId).substring(0, 8), 16) * 1000);
};
const startDate = new Date(2020, 0, 24); // 3->4로되고 시간 설정을 안해서 00시인데 한국00시는 표준시간으로 15시라서  결과적으로 4월14일15시 값이 저장된다.
const endDate = new Date(2020, 3, 15);
const term = 2;
let offset = 0;
console.log(`startDate is ${startDate}, term is ${term}`); // 4월14일15시 값을 +9한 한국시간으로 출력
// console.log(startDate); // 저장되있는 4월14일15시 값 츨력
if (term === 1) {
	offset = 1;
} else if (term === 2) {
	const toMonday = (startDate.getDay() === 0) ? 6 : startDate.getDay() - 1;
	startDate.setDate(startDate.getDate() - toMonday);
	offset = 7;
} else if (term === 3) {
	startDate.setDate(1);
}

const returnData = [];
while (startDate < endDate) {

	const startId = dateToObjectIdConvert(new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate()).getTime());
	if (term === 3) {
		offset = (new Date(startDate.getFullYear(), startDate.getMonth() + 1, 0)).getDate();
	}
	const endId = dateToObjectIdConvert(new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + offset).getTime());

	returnData.push({ start: objectIdToDateConvert(startId), end: objectIdToDateConvert(endId) });
	startDate.setDate(startDate.getDate() + offset);
}
console.log(returnData);

+나중에 괜찮으면 npm 서버에도 올리기

+ Recent posts