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