module DateTimeDiff
Constants
- VERSION
Public Class Methods
diff_to_s(mls, format=nil, options)
click to toggle source
# File lib/datetime_diff.rb, line 5 def self.diff_to_s mls, format=nil, options mls = (mls * 1000).to_i s = m = h = d = 0 if mls >= 1000 s = (mls-(mls%1000))/1000 mls = mls%1000 end if s >= 60 m = (s-(s%60))/60 s = s%60 end if m >= 60 h = (m-(m%60))/60 m = m%60 end if h >= 24 d = (h-(h%24))/24 h = h%24 end t = {D: d, H: h.to_s.rjust(2,"0"), h: h.to_s, M: m.to_s.rjust(2,"0"), mm: m.to_s, S: s.to_s.rjust(2,"0"), ss: s.to_s, m: mls.to_s.rjust(3,"0")} if format r = "" #values = format.scan(/\%\S[\S|\s]{1,3}*?(?!%)/) values = format.scan(/\%\w{1,3}/) zero_left = !options[:zero_left] || false for xV in values number = t[xV.gsub("%","").to_sym].to_i zero_left = false if number > 0 unless zero_left && number == 0 if values.index(xV) + 1 == values.size x = format.scan(/(?<=#{xV})[\s|\S]*?$/)[0] else x = "#{format.scan(/(?<=#{xV})[\s|\S]*?(?=\%)/)[0]}" end if x.strip[0] == "[" && x.strip[-1] == "]" values_ = x.gsub(/\[|\]/, '').split(',') while values_.size < 3 values_.unshift nil end if number == 0 && values_[0] r += "#{number}#{values_[0]}" elsif number == 1 && values_[1] r += "#{number}#{values_[1]}" elsif number > 1 && values_[2] r += "#{number}#{values_[2]}" end else r += "#{number}#{x}" end else zero_left = true end end r else r += "#{h} #{h > 1 ? "hours" : "hour"} " r += "#{m} #{m > 1 ? "minutes" : "minute"} " r += "#{s} #{s > 1 ? "seconds" : "second"} " r += "#{mls} #{mls > 1 ? "milliseconds" : "millisecond"} " r.strip.gsub(/\s{2,}/," ") end end
Public Instance Methods
diff(dt, format=nil, options = {})
click to toggle source
# File lib/datetime_diff.rb, line 88 def diff dt, format=nil, options = {} mls = 0 if self > dt mls = self.to_time.to_f - dt.to_time.to_f else mls = dt.to_time.to_f - self.to_time.to_f end DateTimeDiff.diff_to_s mls, format, options end
diff_in_mls(dt, format=nil, options = {})
click to toggle source
# File lib/datetime_diff.rb, line 97 def diff_in_mls dt, format=nil, options = {} mls = 0 if self > dt mls = self.to_time.to_f - dt.to_time.to_f else mls = dt.to_time.to_f - self.to_time.to_f end mls end