class Timezonify::Timezone

Public Class Methods

find_country_in_timezone(timezone) click to toggle source
# File lib/timezonify.rb, line 26
def self.find_country_in_timezone(timezone)
  Mapping.timezone_country["#{timezone.gsub('+0','+').gsub(':00','')}"]
end
find_time_at(timezone) click to toggle source
# File lib/timezonify.rb, line 15
def self.find_time_at(timezone)
  return (ActiveSupport::TimeZone[0].now) unless timezone.include?(":")
  operation = timezone.split("GMT").last[0]
  hours_n_minutes = timezone.gsub("+","").gsub("-","").split("GMT").last.split(":")
  hours_to_seconds = hours_n_minutes.first.to_i * 60 * 60
  minutes_to_seconds = hours_n_minutes.last.to_i * 60
  total_seconds_diff = hours_to_seconds + minutes_to_seconds
  total_seconds_diff = -(total_seconds_diff) unless(operation == "+")
  ActiveSupport::TimeZone[total_seconds_diff].now
end
local_zone() click to toggle source
# File lib/timezonify.rb, line 30
def self.local_zone
  timezone_for_time(Time.now)
end
timezone_for_time(time='Time.now.utc') click to toggle source
# File lib/timezonify.rb, line 34
def self.timezone_for_time(time='Time.now.utc')
  offset = find_offset_for_required_time(time.to_s, current_time="#{Time.now.utc.strftime("%I:%M %p UTC")}")
  ((offset < 0) ? formatted_negative_offset(offset) : formatted_positive_offset(offset))
end

Private Class Methods

find_offset_for_required_time(required_time='8:00 AM UTC', current_time=" click to toggle source
# File lib/timezonify.rb, line 41
def self.find_offset_for_required_time(required_time='8:00 AM UTC', current_time="#{Time.now.utc.strftime("%I:%M %p UTC")}")
  current_time_in_hours  = TimeHelper.time_in_hours(Time.parse(required_time))
  required_time_in_hours = TimeHelper.time_in_hours(Time.parse(current_time))
  (current_time < required_time) ? offset_calculator(required_time_in_hours,current_time_in_hours) : offset_calculator(current_time_in_hours,required_time_in_hours)
end
formatted_negative_offset(negative_offset_in_hours) click to toggle source
# File lib/timezonify.rb, line 58
def self.formatted_negative_offset(negative_offset_in_hours)
  offset_in_hours = negative_offset_in_hours.to_s.split('-').last.to_f
  offset_hours    = hour_from_offset(offset_in_hours)
  offset_minutes  = minutes_from_offset(offset_in_hours)
  timezone_as_string(offset_hours, offset_minutes, '-')
end
formatted_positive_offset(offset_in_hours) click to toggle source
# File lib/timezonify.rb, line 51
def self.formatted_positive_offset(offset_in_hours)
  return 'GMT' if (offset_in_hours == 0)
  offset_hours = hour_from_offset(offset_in_hours)
  offset_minutes = minutes_from_offset(offset_in_hours)
  timezone_as_string(offset_hours, offset_minutes, '+')
end
hour_from_offset(offset_in_hours) click to toggle source
# File lib/timezonify.rb, line 65
def self.hour_from_offset(offset_in_hours)
  offset_in_hours.to_s.split('.').first.to_i
end
minutes_from_offset(offset_in_hours) click to toggle source
# File lib/timezonify.rb, line 69
def self.minutes_from_offset(offset_in_hours)
  offset_in_hours.to_s.split('.').last.to_i
end
offset_calculator(time1,time2) click to toggle source
# File lib/timezonify.rb, line 47
def self.offset_calculator(time1,time2)
  -(time1 - time2)
end
timezone_as_string(offset_hours, offset_minutes, state) click to toggle source
# File lib/timezonify.rb, line 73
def self.timezone_as_string(offset_hours, offset_minutes, state)
  if offset_minutes > 0
    if offset_hours < 10
      "GMT#{state}0" + "#{offset_hours}" + ":30"
    else
      "GMT#{state}" + "#{offset_hours}" + ":30"
    end
  else
    if offset_hours < 10
      "GMT#{state}0" + "#{offset_hours}"
    else
      "GMT#{state}" + "#{offset_hours}"
    end
  end
end