How to get the Last 15th of the Month Using Ruby

How do we compare date times from now against the 15th of last month?

how to make conditional statements since 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!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.