Module: UaEnv::UaDates

Defined in:
lib/uaenv/uadates/uadates.rb

Constant Summary collapse

UA_MONTHNAMES =
[nil] + %w{ січень лютий березень квітень травень червень липень серпень вересень жовтень листопад грудень }
UA_DAYNAMES =
%w(неділя понеділок вівторок середа червер п'ятниця субота)
UA_ABBR_MONTHNAMES =
[nil] + %w{ січ лют бер кві тра чер лип сер вер жов лис гру }
UA_ABBR_DAYNAMES =
%w(нд пн вт ср чт пт сб)
UA_INFLECTED_MONTHNAMES =
[nil] + %w{ січня лютого березня квітня травня червня липня серпня вересня жовтня листопада грудня }
UA_DAYNAMES_E =
[nil] + %w{перше друге третє четверте п'яте шосте сьоме восьме дев'яте десяте одинадцяте дванадцяте тринадцяте чотирнадцяте п'ятнадцяте шістнадцяте сімнадцяте вісімнадцяте дев'ятнадцяте двадцяте двадцять тридцяте тридцять}
@@ignored =

www.ruby-doc.org/core-1.9.3/Time.html#method-i-strftime ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html#method-i-strftime Literal string:

%% - Literal ``%'' character

unicode.org/reports/tr20/tr20-1.html U+FFFC Object replacement character офіційно застосовується для позначення вкладеного об‘єкту

[0xEF, 0xBF, 0xBC].pack("U*").freeze

Class Method Summary collapse

Class Method Details

.distance_of_time_in_words(from_time, to_time = 0, include_seconds = false, options = {}) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/uaenv/uadates/uadates.rb', line 36

def self.distance_of_time_in_words(from_time, to_time = 0, include_seconds = false, options = {})
  from_time = from_time.to_time if from_time.respond_to?(:to_time)
  to_time = to_time.to_time if to_time.respond_to?(:to_time)
  distance_in_minutes = (((to_time - from_time).abs)/60).round
  distance_in_seconds = ((to_time - from_time).abs).round

  case distance_in_minutes
    when 0..1
      return (distance_in_minutes == 0) ? 
        'менше хвилини' :
        '1 хвилину' unless include_seconds
    
    case distance_in_seconds
       when 0..5   then 'менше 5 секунд'
       when 6..10  then 'менше 10 секунд'
       when 11..20 then 'менше 20 секунд'
       when 21..40 then 'півхвилини'
       when 41..59 then 'менше хвилини'
       else             '1 хвилину'
     end
    
     when 2..45      then distance_in_minutes.to_s + 
                          " " + distance_in_minutes.items("хвилина", "хвилини", "хвилин") 
     when 46..90     then 'близько години'
     
     when 90..1440   then "близько " + (distance_in_minutes.to_f / 60.0).round.to_s + 
                          " " + (distance_in_minutes.to_f / 60.0).round.items("години", 'годин', 'годин')
     when 1441..2880 then '1 день'
     else                  (distance_in_minutes / 1440).round.to_s + 
                          " " + (distance_in_minutes / 1440).round.items("день", "дні", "днів")
     end
end

.ua_strftime(format = '%d.%m.%Y', time = '') ⇒ Object



25
26
27
28
29
30
31
32
33
# File 'lib/uaenv/uadates/uadates.rb', line 25

def self.ua_strftime(format='%d.%m.%Y', time='')
  clean_fmt = format.to_s.gsub(/%%/, @@ignored).
    gsub(/%a/, UA_ABBR_DAYNAMES[time.wday]).
    gsub(/%A/, UA_DAYNAMES[time.wday]).
    gsub(/%b/, UA_ABBR_MONTHNAMES[time.mon]).
    gsub(/%d(\s)*%B/, time.day.to_s + '\1' + UA_INFLECTED_MONTHNAMES[time.mon]).
    gsub(/%B/, UA_MONTHNAMES[time.mon]).
    gsub(@@ignored, '%%')
end