0.01
No commit activity in last 3 years
No release in over 3 years
This ruby gem converts time of day to seconds (since midnight) and back. The value in seconds can be used for calculations and validations.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

Runtime

>= 0.7
 Project Readme

Time of day attributes for your Rails model

Gem Version Code Climate License

This ruby gem converts time of day to seconds (since midnight) and back. The value in seconds can be used for calculations and validations.

Installation

gem install time_of_day_attr

Usage

Define the time of day attributes:

class BusinessHour < ActiveRecord::Base
  time_of_day_attr :opening, :closing
end

Converts time of day to seconds since midnight when a string was set:

business_hour = BusinessHour.new(opening: '9:00', closing: '17:00')
business_hour.opening
 => 32400
business_hour.closing
 => 61200

To convert back to time of day:

TimeOfDayAttr.l(business_hour.opening)
 => '9:00'
TimeOfDayAttr.l(business_hour.closing)
 => '17:00'

You could also omit minutes at full hour:

TimeOfDayAttr.l(business_hour.opening, omit_minutes_at_full_hour: true)
 => '9'

Formats

The standard formats for conversion are 'default' and 'hour'.

en:
  time_of_day:
    formats:
      default: '%k:%M'
      hour: '%k'

You can overwrite them or use custom formats:

en:
  time_of_day:
    formats:
      custom: '%H-%M'

Pass the formats you want for conversion:

class BusinessHour < ActiveRecord::Base
  time_of_day_attr :opening, formats: [:custom]
end
business_hour = BusinessHour.new(opening: '09-00')
business_hour.opening
 => 32400
TimeOfDayAttr.l(business_hour.opening, format: :custom)
 => '09-00'

Prepending

If you want to process the converted value in your model, you can use the prepend option:

class BusinessHour < ActiveRecord::Base
  attr_reader :tracked_opening, :tracked_closing

  time_of_day_attr :opening
  time_of_day_attr :closing, prepend: true

  def opening=(value)
    @tracked_opening = value
    super(value)
  end

  def closing=(value)
    @tracked_closing = value
    super(value)
  end
end
business_hour = BusinessHour.new(opening: '9', closing: '9')
business_hour.tracked_opening
=> '9'
business_hour.tracked_closing
=> 32400

time of day field

To get a text field with the converted value:

<%= form_for(business_hour) do |f| %>
  <%= f.time_of_day_field(:opening) %>
<% end %>

License

MIT