MySQL createdAt 기준으로 데이터 추출 (sequelize)

parkjh9370·2022년 5월 8일
0

🔎 카테고리 검색 기능 구현 중 MySQL에 저장된 게시물에서 7일전부터 현재까지의 데이터를 뽑아내야 했다.

  • 데이터가 저장된 시간을 나타내는 createdAt 를 기준으로 -7일 ~ 현재까지의 데이터 필요

  • 저장되는 형식이 new Date() 이기 때문에 이를 통해 -7일의 날짜를 뽑고 [Op.gte] 를 사용해 구현

 getLikeBoards: async (page, limit) => {
    return await Board.findAndCountAll({
      order: [['id', 'desc']],
      attributes: ['id', 'title', 'content', 'picture', 'createdAt', 'UserId'],
      where: {
        createdAt: {
          [Op.gte]: new Date(Date.parse(new Date()) - 7 * 1000 * 60 * 60 * 24),
        },
      },
      include: [
        {
          model: Comment,
          attributes: ['comment'],
        },
        {
          model: User,
          attributes: ['nickname'],
        },
      ],
    });
  },

🤫 처음에 이 방법이 맞을까? 하고 긴가민가 하며 시도했는데 데이터베이스에 7일전 넣은 데이터가 없었기에 잘 되는지 확인할 수 없었다. (모든 데이터 다 불러와짐)

하지만 [Op.gte]에 1일전, 2일전 데이터가 creatdAt 기준으로 잘 뽑히는걸 보며 잘 작동되고 있음을 확인할 수 있었다. 😀


new Date() 날짜 계산

var curDate = new Date();     // 현재 날짜 및 시간

new Date(Date.parse(curDate) -30 * 1000 * 60 * 60 * 24));     // 30일전

new Date(Date.parse(curDate) -15 * 1000 * 60 * 60 * 24));     // 15일전

new Date(Date.parse(curDate) -7 * 1000 * 60 * 60 * 24));     // 7일전

new Date(Date.parse(curDate) -1 * 1000 * 60 * 60 * 24));     // 1일전

new Date(Date.parse(curDate) +1 * 1000 * 60 * 60 * 24));     // 1일후

new Date(Date.parse(curDate) +7 * 1000 * 60 * 60 * 24));     // 7일후

new Date(Date.parse(curDate) +15 * 1000 * 60 * 60 * 24));     // 15일후

new Date(Date.parse(curDate) +30 * 1000 * 60 * 60 * 24));     // 30일후

new Date(Date.parse(curDate) + 1000 * 60 * 60));     // 한시간후

new Date(Date.parse(curDate) + 1000 * 60));     // 1분후

new Date(Date.parse(curDate) + 1000));     // 1초후

0개의 댓글