open_hours alternatives and similar packages
Based on the "Date and Time" category.
Alternatively, view open_hours alternatives based on common mentions on social networks and blogs.
-
filtrex
A library for performing and validating complex filters from a client (e.g. smart filters) -
Crontab
Parse Cron Expressions, Compose Cron Expression Strings and Caluclate Execution Dates. -
Ex_Cldr_Dates_Times
Date & times formatting functions for the Common Locale Data Repository (CLDR) package https://github.com/elixir-cldr/cldr -
good_times
Expressive and easy to use datetime functions in Elixir. -
moment
Moment is designed to bring easy date and time handling to Elixir. -
jalaali
Jalaali (also known as Jalali, Persian, Khorshidi, Shamsi) calendar implementation in Elixir. -
timex_interval
A date/time interval library for Elixir projects, based on Timex. -
block_timer
Macros to use :timer.apply_after and :timer.apply_interval with a block -
emojiclock
An Elixir module for returning an emoji clock for a given hour -
Calixir
Calixir is a port of the Lisp calendar software calendrica-4.0 to Elixir. -
japan_municipality_key
Elixir Library for Japan municipality key converting
Learn Elixir in as little as 12 Weeks
Do you think we are missing an alternative of open_hours or a related project?
Popular Comparisons
README
OpenHours
OpenHours is an Elixir package aimed to help with time calculations using business hours.
It's inspired by the amazing ruby gem biz developed by Zendesk.
Installation
The package can be installed by adding open_hours
to your list of dependencies in mix.exs
:
def deps do
[
{:open_hours, "~> 0.1.0"}
]
end
Usage
In order to use OpenHours functions you first need a Schedule
config:
schedule = %OpenHours.Schedule{
hours: %{
mon: [{~T[09:00:00], ~T[14:00:00]}, {~T[15:00:00], ~T[20:00:00]}],
tue: [{~T[09:00:00], ~T[14:00:00]}, {~T[15:00:00], ~T[20:00:00]}],
wed: [{~T[09:00:00], ~T[14:00:00]}, {~T[15:00:00], ~T[20:00:00]}],
thu: [{~T[09:00:00], ~T[14:00:00]}, {~T[15:00:00], ~T[20:00:00]}]
},
holidays: [
~D[2019-01-14]
],
shifts: [
{~D[2019-01-15], [{~T[10:00:00], ~T[15:00:00]}]}
],
breaks: [
{~D[2019-01-16], [{~T[17:00:00], ~T[20:00:00]}]}
],
time_zone: "Europe/Madrid"
}
There are five settings to configure in a schedule:
hours
: Map containing all the open hours intervals for a regular week.holidays
: List of dates in which the business is closed.shifts
: Special dates where the business has a different hour schedule.breaks
: Special dates where the business has interruption intervals.time_zone
: Time zone of the schedule.
OpenHours offers two main functionalities.
Checking a DateTime is within open hours
> at = DateTime.from_naive!(~N[2019-01-15 14:00:00], "Europe/Madrid", Tzdata.TimeZoneDatabase)
#DateTime<2019-01-15 14:00:00+01:00 CET Europe/Madrid>
> OpenHours.Schedule.in_hours?(schedule, at)
true
> at = DateTime.from_naive!(~N[2019-01-14 12:00:00], "Europe/Madrid", Tzdata.TimeZoneDatabase)
#DateTime<2019-01-14 12:00:00+01:00 CET Europe/Madrid>
> OpenHours.Schedule.in_hours?(schedule, at)
false
Calculate all TimeSlot between two dates
> starts_at = DateTime.from_naive!(~N[2019-01-14 12:00:00], "Europe/Madrid", Tzdata.TimeZoneDatabase)
#DateTime<2019-01-14 12:00:00+01:00 CET Europe/Madrid>
> ends_at = DateTime.from_naive!(~N[2019-01-16 22:00:00], "Europe/Madrid", Tzdata.TimeZoneDatabase)
#DateTime<2019-01-16 22:00:00+01:00 CET Europe/Madrid>
> OpenHours.TimeSlot.between(schedule, starts_at, ends_at)
[
%OpenHours.TimeSlot{
ends_at: #DateTime<2019-01-15 15:00:00+01:00 CET Europe/Madrid>,
starts_at: #DateTime<2019-01-15 10:00:00+01:00 CET Europe/Madrid>
},
%OpenHours.TimeSlot{
ends_at: #DateTime<2019-01-16 14:00:00+01:00 CET Europe/Madrid>,
starts_at: #DateTime<2019-01-16 09:00:00+01:00 CET Europe/Madrid>
},
%OpenHours.TimeSlot{
ends_at: #DateTime<2019-01-16 17:00:00+01:00 CET Europe/Madrid>,
starts_at: #DateTime<2019-01-16 15:00:00+01:00 CET Europe/Madrid>
}
]
License
This software is licensed under the [MIT license](LICENSE.md).
*Note that all licence references and agreements mentioned in the open_hours README section above
are relevant to that project's source code only.