Выберите данные из sqlite3 до или после определенной даты с помощью Typeorm

#javascript #database #typescript #sqlite #typeorm

Вопрос:

Я хочу выбрать данные до или после определенной даты, sqlite используя Typeorm , где указана дата milliseconds .

Вот мой Query Builder :

   const qb = getConnection()
    .getRepository(Post)
    .createQueryBuilder('p')
    .where('createdAt < :cursor', {
       cursor: "1624809058000"
     })
    .getMany()
 

Ответ №1:

Мы должны передать дату в следующем формате: "yyyy-mm-dd HH:MM:ss.l" Пример: "2000-01-01 00:00:00.000"
Итак, мы должны преобразовать дату в этот формат.

  1. Первое решение
   const chars = { T: ' ', Z: '' }
  const dateInMilliseconds = "1624809058000"
  const qb = getConnection()
    .getRepository(Post)
    .createQueryBuilder('p')
    .where('createdAt < :cursor', {
       cursor: new Date(parseInt(dateInMilliseconds))
         .toISOString()
         .replace(/[TZ]/g, ch => chars[ch])
     })
    .getMany()
 
  1. Второе решение
 import { LessThan, MoreThan } from 'typeorm'
import { format } from 'date-fns'

// TypeORM Query Operators
const MoreThanDate = (date: Date) => MoreThan(format(date, 'yyyy-mm-dd HH:MM:SS'))
const LessThanDate = (date: Date) => LessThan(format(date, 'yyyy-mm-dd HH:MM:SS'))

const dateInMilliseconds = "1624809058000"
const posts = await Post.find({
    createdAt: MoreThanDate(new Date(dateInMilliseconds))
})
 
  1. Третье решение
 import { Between } from 'typeorm';
import { addYears, subYears } from 'date-fns';

// TypeORM Query Operators
const MoreThanDate = (date: Date) => Between(date, addYears(date, 100));
const LessThanDate = (date: Date) => Between(subYears(date, 100), date);

const dateInMilliseconds = "1624809058000"
const posts = await Post.find({
  where: {
    createdAt: MoreThanDate(new Date(dateInMillisecons)),
  },
});