Module: N::TimeUtils

Defined in:
lib/n/utils/time.rb

Overview

TimeUtils

Design:

Implement as a module to avoid class polution. You can still Ruby’s advanced features to include the module in your class. Passing the object to act upon allows to check for nil, which isn’t possible if you use self.

TODO:

  • SOS: add test units.

  • add aliases for those methods in Kernel ?

Constant Summary collapse

NOW =
Time.now
NEVER =
Time.mktime(2038)
ZERO =
Time.mktime(1972)

Class Method Summary collapse

Class Method Details

.date_time(time) ⇒ Object



34
35
36
37
# File 'lib/n/utils/time.rb', line 34

def self.date_time(time)
	return nil unless time 
	return time.strftime("%d-%m-%Y %H:%M")
end

.days_extrema(time1, time2 = nil) ⇒ Object

this method calculates the days extrema given two time objects. start time is the given time1 at 00:00:00 end time is the given time2 at 23:59:59:999

Input:

  • the two times (if only time1 is provided then you get an extrema of exactly one day extrema.

Output

  • the time range. you can get the start/end times using range methods.



51
52
53
54
55
56
57
# File 'lib/n/utils/time.rb', line 51

def self.days_extrema(time1, time2=nil)
	time2 = time1 if (not time2.valid? Time)
	time2 = NEVER if (time2 <= time1)
	start_time = Time.self.start_of_day(time1)
	end_time = self.end_of_day(time2)
	return (start_time..end_time)
end

.end_of_day(time) ⇒ Object

set time to end of day



69
70
71
# File 'lib/n/utils/time.rb', line 69

def self.end_of_day(time)
	return Time.mktime(time.year, time.month, time.day, 23, 59, 59, 999)
end

.start_of_day(time) ⇒ Object

set time to start of day



62
63
64
# File 'lib/n/utils/time.rb', line 62

def self.start_of_day(time)
	return Time.mktime(time.year, time.month, time.day, 0, 0, 0, 0)
end

.time_in_day_range(time, stime = ZERO, etime = NEVER) ⇒ Object

returns true only if day of time is included in the range (stime..etime). Only year days are checked.



77
78
79
80
81
82
83
84
85
86
87
# File 'lib/n/utils/time.rb', line 77

def self.time_in_day_range(time, stime=ZERO, etime=NEVER)
	if (etime <= stime)
		$log.debug "Invalid end time (#{etime} < #{stime})" if $DBG
		etime = NEVER
	end

	stime = start_of_day(stime)
	etime = end_of_day(etime)

	return (stime..etime).include?(time)
end