Een datum in de toekomst of het verleden berekenen

Ruby:
Een datum in de toekomst of het verleden berekenen

Hoe te:

Ruby maakt het spelen met data kinderspel met behulp van de ingebouwde Date klasse en de active_support gem voor wat extra suiker. Zo wordt het gedaan:

require 'date'
require 'active_support/core_ext/integer'

# Vandaag's datum ophalen
today = Date.today
puts "Vandaag is: #{today}"

# Een datum 10 dagen in de toekomst berekenen
future_date = today + 10
puts "Over 10 dagen zal het zijn: #{future_date}"

# Een datum 30 dagen in het verleden berekenen
past_date = today - 30
puts "30 dagen geleden was het: #{past_date}"

# Meer complexe berekeningen met active_support
puts "Over 2 maanden zal het zijn: #{2.months.from_now.to_date}"
puts "100 dagen geleden was het: #{100.days.ago.to_date}"

Voorbeelduitvoer:

Vandaag is: 2023-04-07
Over 10 dagen zal het zijn: 2023-04-17
30 dagen geleden was het: 2023-03-08
Over 2 maanden zal het zijn: 2023-06-07
100 dagen geleden was het: 2022-12-28

Diep Duiken

Voordat Ruby datumcalculatiefuncties in zijn standaard en aanvullende bibliotheken absorbeerde, moesten ontwikkelaars vaak handmatig data berekenen, rekening houdend met schrikkeljaren, verschillende maandlengtes en tijdzones - een behoorlijke hoofdpijn.

De standaard Date klasse doet al veel uit de doos. Je kunt gemakkelijk dagen toevoegen (+) of aftrekken (-). Echter, voor meer intuïtieve tijdperiode manipulaties, zoals “over 2 maanden”, vertrouwen we op active_support, onttrokken uit Ruby on Rails. Deze gem gebruikt uitbreidingen op standaard Ruby klassen, waardoor dergelijke berekeningen mensvriendelijk worden.

Wanneer je verleden of toekomstige datums berekent, overweeg dan tijdszones als je ook tijden meerekent (DateTime of Time objecten). Ruby’s Time klasse en active_support kunnen dit aan, maar vereisen iets meer opzet.

Er zijn alternatieven, zoals de gems time-lord en ice_cube, die respectievelijk meer syntactische suiker of gespecialiseerde functies (zoals terugkerende evenementen) bieden.

Zie Ook