Рельсы Activerecord, где дата от 20 до 20 - PullRequest
2 голосов
/ 21 апреля 2020

Мне нужно отображать только работы с 20-го числа месяца по 20-е следующего месяца (каждый период с 20 по 20 каждого месяца)

Я вижу два случая:

1.- Если я нахожусь в 15 любого месяца (или ниже 20), я должен отобразить с 20 в прошлом месяце до сегодняшнего дня.

2.- Если я в 25 любого месяца (или выше 20) Мне нужно отобразить с 20 числа этого месяца до сегодняшнего дня.

Не знаю синтаксис для этого Примерно так

if Date.today.day > 20
  @works = Work.where(created_at: "20 of this month to Date.today")
else
  @works = Work.where(created_at: "20 of last month to Date.today")
end

Ответы [ 4 ]

2 голосов
/ 21 апреля 2020
date = Date.today.change(day: 20)
date -= 1.month if date > Date.today
@works = Work.where(created_at: date..(date + 1.month))

В зависимости от ваших конкретных c требований, последнее условие может быть любым из следующих:

date..(date + 1.month)
date...(date + 1.month)
date..date.today
date...date.today
1 голос
/ 21 апреля 2020

Примерно так я и делал один раз (написано по памяти, не проверено)

if Date.today.day > 20
  start_day = Date.new(Date.today.year, Date.today.month, 20)
  end_day   = start_day + 1.month
else
  start_day = Date.new(Date.today.year, Date.today.month, 20) - 1.month
  end_day   = Date.new(Date.today.year, Date.today.month, 20)
end

Work.where(created_at: start_day..end_day)
0 голосов
/ 22 апреля 2020

Спасибо всем, я взял ваши идеи и эту работу для меня

if Date.today.day > 20
  @works = Work.where(created_at: ((Date.new((Date.today.year),(Date.today.month),21)))..Date.today)
else
  @works = Work.where(created_at: ((Date.new((Date.today.year),(Date.today.month),21)) - 1.month)..Date.today)
end
0 голосов
/ 21 апреля 2020

Это будет выглядеть примерно так:

# The ".." sets a range, (from)..(to)
if Date.today.day > 20
  @works = Work.where(created_at: (Date.today - 20)..(Date.today))
else
  @works = Work.where(created_at: (Date.today.change(day: 20))..(Date.today))
end

Вы также можете проверить документацию для дополнительных вычислений DateTime :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...