Obtenez le dernier jour du mois en Ruby

J’ai fait un nouvel object Date.new avec args (année, mois). Après avoir créé ruby ​​ajouté 01 numéro de jour à cet object par défaut. Y a-t-il un moyen d’append non le premier jour, mais le dernier jour du mois que j’ai passé en tant qu’arg (par exemple 28 si ce sera 02mois ou 31 si ça sera 01mois)?

utiliser Date.civil

Avec Date.civil(y, m, d) ou son alias .new(y, m, d) , vous pouvez créer un nouvel object Date. Les valeurs du jour (d) et du mois (m) peuvent être négatives. Dans ce cas, elles sont respectivement comptabilisées à la fin de l’année et à la fin du mois.

 => Date.civil(2010, 02, -1) => Sun, 28 Feb 2010 >> Date.civil(2010, -1, -5) => Mon, 27 Dec 2010 

Pour obtenir la fin du mois, vous pouvez également utiliser l’aide d’assistance end_of_month .

 # Require extensions explicitly if you are not in a Rails environment require 'active_support/core_ext' p Time.now.utc.end_of_month # => 2013-01-31 23:59:59 UTC p Date.today.end_of_month # => Thu, 31 Jan 2013 

Vous pouvez en savoir plus sur end_of_month dans les Docs API Rails.

Donc, je cherchais dans Google pour la même chose ici …

Je n’étais pas satisfait avec ci-dessus, donc ma solution après avoir lu la documentation dans RUBY-DOC était:

Exemple pour obtenir le 10/31/2014

Date.new(2014,10,1).next_month.prev_day

Ceci est ma solution basée sur le Time . J’ai une préférence personnelle par rapport à Date bien que les solutions proposées ci-dessus soient en quelque sorte meilleures.

reference_time ||= Time.now return (Time.new(reference_time.year, reference_time.month + 1) - 1).day

 require "date" def find_last_day_of_month(_date) if(_date.instance_of? Ssortingng) @end_of_the_month = Date.parse(_date.next_month.strftime("%Y-%m-01")) - 1 else if(_date.instance_of? Date) @end_of_the_month = _date.next_month.strftime("%Y-%m-01") - 1 end return @end_of_the_month end find_last_day_of_month("2018-01-01") 

Ceci est une autre façon de trouver