IfcDate
International Fixed Calendar system. Other name references are Cotsworth and Eastman. This implementation is derived from the specs on: (https://en.wikipedia.org/wiki/International_Fixed_Calendar) And with code inspiraction from: (https://github.com/msampathkumar/ifcalendar)
Installation
Add this line to your application's Gemfile:
gem 'ifc_date'
And then execute:
$ bundle install
Or install it yourself as:
$ gem install ifc_date
Usage
To create an IfcDate object you specify a day of the year and a year:
ifc_date = IfcDate.new(183, 2021)
or from a standard Date
object
Date.today.ifc
Concepts
It is really important to know how the indices of the different time units are:
starday?
ifc_date.starday?
This is a concept introduced in this project. Since there is already a Moonday and a Sunday, The intermittant days, Year day and Leap day can be called Starday, it works in the code.
day_of_year, yday
ifc_date.day_of_year # alias ifc_date.yday
This is the day of the year, ranges from 1-365 for non leap year, 1-366 for leap year.
day_of_week, wday
ifc_date.day_of_week # alias ifc_date.wday
This is the day of the week. Ranges from 0-6, Indicating Sunday-Saturday.
There is no days starting on Monday concept.
When it is Starday a 7 will be returned.
This will work in the ifc_date.day_name
and ifc_date.abbr_day_name
methods
week_of_year, week
ifc_date.week_of_year # alias ifc_date.week
This returns the number of the week of the year. Ranges from 1-52. Note that the legacy date system can have week numbers 53 both in December and Januari, this will be the past.
At the moment on a Starday the week number will return 0. Personally I might prefer to add the Starday week_of_year number to the week number that preceeds it. But I still have to investigate the validity of this one based on the specs.
day_of_month, mday
ifc_date.day_of_month # alias ifc_date.mday
This returns the index of the day in the month. Ranges 1-28
month_of_year, month
ifc_date.month_of_year # alias ifc_date.month
This returns the index of the month in the year. Ranges 1-13. The Starday days are added to the month number that preceeds those days as day number 29.
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and the created tag, and push the .gem
file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/ifc_date.
License
The gem is available as open source under the terms of the MIT License.