How do we compare date times from now against the 15th of last month?
I’m writing a program which assigns episodes to invoices based on the time the episodes were created. Each episode’s publishing date is recorded as follows:
pry(main)> most_recent_episode_publishing_date = Episode.last.updated_at
Episode Load (0.6ms) SELECT "episodes".* FROM "episodes" ORDER BY "episodes"."id" DESC LIMIT $1 [["LIMIT", 1]]
=> Mon, 26 May 2014 18:23:36 UTC +00:00
The above code tells us that the last episode was published on May 26th, 2014.
We save that date object which we can compare against the 15th of the previous month. First we need to get a date object for the day of the 15th of the previous month. Here’s how we do that:
pry(main)> now = Time.now
=> 2019-10-28 13:05:17 -0700
pry(main)> the_15th_of_last_month = Date.new(now.year, now.month, 15).prev_month
=> Sun, 15 Sep 2019
Now that we have the 15th of last month saved as the_15th_of_last_month
and the most_recent_episode_publishing_date
, we can compare them to know if this episodes is more recent than the last 15th of the month:
pry(main)> most_recent_episode_publishing_date > the_15th_of_last_month
=> false
This means that our most most_recent_episode_publishing_date
was published before the 15th of last month. As I only want episodes published in between the last 15th and today, I’ll not add this to the Invoice
association.
The logic can be flipped around however you want to use this tool. Enjoy!