Provides a Crystal implementation of Go-style time formatting by example.
-
Add the dependency to your
shard.yml
:dependencies: time_by_example: github: mamantoha/time_by_example
-
Run
shards install
require "time_by_example"
This shard adds a by_example
method to Time
.
The argument to this method is the formatted version of a reference date.
For example:
time = Time.local(2022, 12, 20, 17, 15, 30, location: Time::Location.load("Asia/Taipei"))
time.by_example("Jan 02 2006 @ 03:04 pm") => "Dec 20 2022 @ 05:15 pm"
time.by_example("Jan 02 2006 @ 15:04") => "Dec 20 2022 @ 17:15"
time.by_example("Mon 02 Jan 15:04") => "Tue 20 Dec 17:15"
time.by_example("01/02/06") => "12/20/22"
time.by_example("02.01.2006") => "20.12.2022"
time.by_example("15:04 MST") => "17:15 Asia/Taipei"
The reference time is Jan 2, 2006 at 3:04:05 PM MST
, which can be remembered as 1 2 3 4 5 6 -7
.
Period | Constants |
---|---|
Year | 2006 and 06 |
Month | January , JANUARY , Jan , JAN , 1 , 01 , and _1 for space padding |
Day of the week | Mon , MON , Monday , MONDAY |
Day of month | 2 , 02 , and _2 for space padding |
Day of year | 002 |
Hour | 15 , 3 , 03 , pm , PM , am , AM |
Minute | 04 , but not 4 |
Second | 05 , 05.000 for milliseconds and 05.000000 and 05.000000000 , but not 5 |
Time Zone | -7000 , -07:00 , -07:00:00 , MST |
If you want to reuse a format multiple times, you can do so by creating and reusing an TimeByExample::ExampleFormat
ef = TimeByExample::ExampleFormat.new("03:04 pm")
ef.format(Time.local(2022, 12, 20, 17, 15, 30)) # => "05:15 pm"
ef.format(Time.local(2022, 12, 20, 5, 15, 30)) # => "05:15 am"
- Fork it (https://github.com/mamantoha/time_by_example/fork)
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
- Anton Maminov - creator and maintainer