3.5. Arytmetyka dat
Problem
Należy obliczyć dystans dzielący dwie daty bądź wyznaczyć datę odległą o ustalony dystans — w przód lub wstecz — od pewnej daty odniesienia.
Rozwiązanie
Ponieważ obiekty klas Time
, DateTime
i Date
reprezentowane są w postaci liczb, można do nich dodawać i odejmować od nich liczby. W przypadku obiektów Time
powoduje to dodanie (odjęcie) odpowiedniej liczby sekund, w przypadku dwóch pozostałych klas — odpowiedniej liczby dni.
require 'date' y2k = Time.gm(2000, 1, 1) # => Sat Jan 01 00:00:00 UTC 2000 y2k + 1 # => Sat Jan 01 00:00:01 UTC 2000 y2k - 1 # => Fri Dec 31 23:59:59 UTC 1999 y2k + (60 * 60 * 24 * 365) # => Sun Dec 31 00:00:00 UTC 2000 y2k_dt = DateTime.new(2000, 1, 1) (y2k_dt + 1).to_s # => "2000-01-02T00:00:00Z" ...
Get Ruby. Receptury now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.