resumen libro latino fahrenheit español bradbury audiolibro analisis ruby date datetime

libro - Obtener el último día del mes en Ruby



fahrenheit 451 ray bradbury (5)

Hice un nuevo objeto Date.new con args (año, mes). Después de crear, Ruby agregó 01 número de días a este objeto de forma predeterminada. ¿Hay alguna manera de agregar no el primer día, pero el último día del mes que pasé como arg (por ejemplo, 28 si será 02meses o 31 si será 01meses)?


Así que estaba buscando en Google lo mismo aquí ...

No estaba satisfecho con lo de arriba, así que mi solución después de leer la documentación en RUBY-DOC fue:

Ejemplo para obtener 10/31/2014

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


Esta es mi solución basada en el Time . Tengo una preferencia personal en comparación con la Date aunque las soluciones de Date propuestas anteriormente se leen de alguna manera mejor.

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


Para finalizar el mes, también puede usar el ayudante de 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

Puede encontrar más información sobre end_of_month en los Documentos API de Rails.


usa Date.civil

Con Date.civil(y, m, d) o su alias .new(y, m, d) , puede crear un nuevo objeto Date. Los valores para el día (d) y el mes (m) pueden ser negativos, en cuyo caso se cuentan hacia atrás desde el final del año hasta el final del mes, respectivamente.

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


require "date" def find_last_day_of_month(_date) if(_date.instance_of? String) @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")

Esta es otra forma de encontrar