I think your problem boils down to defining the first day of the
"year"? After that you can simply count days and divide by 7?
Similarly a week end will be defined by (mod(days, 7) == 0)
Perhaps you need a function which takes a year and gives you the date of
the start of the year?
Ed W
On 10/07/2017 22:48, Kip wrote:
Definitely worth thinking about as an approach for weeks. Some of
calendars may make that tricky - I'll need to ponder some more.
1. "4-5-4" calendar (and its related friends 445 and 544). This is
used extensively by the retail industry
(https://nrf.com/resources/4-5-4-calendar).
2. Another class is the financial period calendars of corporations in
the US that get to define their fiscal year. For example Cisco Inc
has a financial year defined as "ends of the last Saturday of July".
Its fiscal year 2017 for example, starts on July 31st 2016. (also to
note the effective year is different from the gregorian year of the
day in question). This is a class of calendar that requires
configuration information - I haven't quite worked out the right
strategy for these calendars yet (Date.new/3 won't fit these cases as is)
Then there is the locale-specific understanding of a week:
1. Starts on a Monday, Saturday or Sunday
2. 1st week starts as the first calendar week which contains four
days of the new year
3. 1st week starts as the week in which January 1st occurs
I think these situations are likely to make basing weeks along the ISO
Week strategy a bit tricky.
On Tuesday, July 11, 2017 at 5:15:37 AM UTC+8, Wiebe-Marten Wijnja wrote:
I am all for this!
However, I do have a note about the week-related stuff:
On one hand, people might expect 'weeks' to be readily available
(`:calendar` offers them, and many other libraries in other
language environments do).
On the other, many calendars do not themselves have a notion of
weeks. (Weeks are only secondary units of date measurements
(years, months, days are the primary ones) and nearly all
calendars, all across the globe, use a seven-day week.
Weeks are basically the months of the ISO week date calendar:
https://en.wikipedia.org/wiki/ISO_week_date
<https://en.wikipedia.org/wiki/ISO_week_date>
I wonder how much of the week-related functionality could be
defined by just taking a date (in e.g. Calendar.ISO) and
converting it into the ISO week date calendar.
~Qqwy/Wiebe-Marten
On Monday, July 10, 2017 at 9:03:53 AM UTC+2, Kip wrote:
With the new capabilities of Calendar in 1.5 I am now adding
date and time localisation to a package I maintain
(https://hex.pm/packages/ex_cldr
<https://hex.pm/packages/ex_cldr>).
CLDR
(http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns
<http://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns>)
defines a number of symbols to aid formatting and
localisation. Many of these can be supported by the Calendar
module (or easily derived). Some would be better defined in a
calendar module - which would imply adding them to the
behaviour and to Calendar.ISO.
These functions are:
1. months_in_year(year) which together with the existing
days_in_month/2 would allow the calculation of quarters which
is relevant in a lot of business contexts
2. week_of_year(date) which returns the week number within
which the date occurs.
3. week_of_month(date) which returns the week of the month
within which the date occurs
5. day_of_week_in_month(date) returns the ordinal day (i.e.
2nd in 2nd Wednesday in July)
6. year(date) which returns the effective year in which the
date lies. For example in an ISO Week implementation, the
"year" may be different to the "year in the date"
Although my immediate focus is date formatting and
localisation, these functions are of themselves relevant for
other "calendarists" (is that a word?) Each of these may
have quite specific implementation details related to a given
calendar and therefore would seem to be appropriate to be part
of the behaviour.
I've tried to think of only those functions which cannot be
readily derived without knowledge of the specific calendar but
I know this is a slippery slope - especially with anything to
do with time and dates.
Thoughts?
--Kip
--
You received this message because you are subscribed to the Google
Groups "elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to [email protected]
<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/elixir-lang-core/db80f9b9-a370-4530-a20a-e7fd192902ba%40googlegroups.com
<https://groups.google.com/d/msgid/elixir-lang-core/db80f9b9-a370-4530-a20a-e7fd192902ba%40googlegroups.com?utm_medium=email&utm_source=footer>.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/elixir-lang-core/4f1c8aa6-9797-ead1-286a-67a50bce8223%40wildgooses.com.
For more options, visit https://groups.google.com/d/optout.