Btw, from an implementation point of view, you can probably implement day_of_week for most calendars as:
def day_of_week(year, month, day, :default), do: day_of_week(year, month, day, INITIAL_DAY_OF_WEEK_FOR_CALENDAR) def day_of_week(year, month, day, starting_on), do: Calendar.ISO.day_of_week(year, month, day, starting_on) *José Valimhttps://dashbit.co/ <https://dashbit.co/>* On Sat, Jan 11, 2025 at 12:14 PM Kip Cole <kipco...@gmail.com> wrote: > I agree that option (1) is more pragmatic. > > I still worry that `Date.day_of_week/2` returns ordinal numbers in all but > one very specific (but almost ubiqtuious) case for Calendar.ISO. So > documentating that the analogous case for all compliant calendar is a > reasonable compromise. > > Proposal closed. > > On 11 Jan 2025, at 9:54 pm, José Valim <jose.va...@gmail.com> wrote: > > > My only intent was to define a standard Elixir API where, for any given > date in any complying calendar, I could know upon which day of the week > that day falls. > > So I can think of two options: > > 1. You can use the atom :monday, as that should return the same meaning on > all calendars based on our weekdays? In the same way that passing :sunday > to Calendar.ISO makes it return the same value as "Calendar.USA". The > benefit of this option is that it is supported for quite some time. > > 2. We introduce a new option, called :iso8601, which returns the default > for iso8601, which is therefore :monday. > > My preference is 1 but I am open to hearing it is a bad idea. :D > > > *José Valimhttps://dashbit.co/ <https://dashbit.co/>* > > > On Sat, Jan 11, 2025 at 11:37 AM Kip Cole <kipco...@gmail.com> wrote: > >> > Also, in your case, couldn't you support a custom starting_on value >> called :iso_default or :monday, which will behave as you described? >> >> In everything I do I try very hard to have a consistent implementation of >> the Calendar behaviour. I believe that in most cases a user or developer >> shouldn’t have to think about what calendar is in use - it’s just the right >> calendar producing the right results. So while I could implement a custom >> `starting_on`, that then sets my calendars apart from the default calendar >> and other peoples calendars. I really really really want to avoid that. >> Calendaring is hard enough as it is without developers having to >> differentiate between them in their code. >> >> > my concern with this PR is that it opens up the path for "duplicating" >> several of the functions in the Date module >> >> I’m just a pragmatist and a bit gun shy to argue any point here. My only >> intent was to define a standard Elixir API where, for any given date in any >> complying calendar, I could know upon which day of the week that day falls. >> >> If I’m the only person who thinks that’s a reasonable expectation then >> there is no need to consider the proposal further. >> >> >> >> On 11 Jan 2025, at 8:33 pm, José Valim <jose.va...@gmail.com> wrote: >> >> Hi Kip, my concern with this PR is that it opens up the path for >> "duplicating" several of the functions in the Date module: >> >> Date.iso_beginning_of_month/1 >> Date.iso_beginning_of_week/2 >> Date.iso_day_of_era/1 >> Date.iso_day_of_week/1 >> Date.iso_day_of_year/1 >> Date.iso_days_in_month/1 >> Date.iso_end_of_month/1 >> Date.iso_end_of_week/2 >> Date.iso_months_in_year/1 >> Date.iso_quarter_of_year/1 >> Date.iso_year_of_era/1 >> >> Perhaps not all of the above but at least a few. >> >> Also, in your case, couldn't you support a custom starting_on value >> called :iso_default or :monday, which will behave as you described? >> >> So your :default can adhere to your custom calendar semantics, and then >> either :monday or :iso_default returns what the computation above would >> provide. >> >> >> *José Valimhttps://dashbit.co/ <https://dashbit.co/>* >> >> >> On Sat, Jan 11, 2025 at 9:45 AM Kip <kipco...@gmail.com> wrote: >> >>> A recent discussion <https://github.com/elixir-lang/elixir/pull/14162> >>> clarified >>> that the return value from `Date.day_of_week/2` is an ordinal value. That >>> is, when it returns "1" that means "first day of week". It specifically >>> does not mean "1" is Monday. >>> >>> That means that it would be useful to have a function that does return >>> the cardinal day of week - that is, a number where 1 == Monday and 7 == >>> Sunday. >>> >>> The function would look something like: >>> >>> def iso_day_of_week(%{calendar: Calendar.ISO} = date) do >>> day_of_week(date) >>> end >>> >>> def iso_day_of_week(date) do >>> date >>> |> convert!(Calendar.ISO) >>> |> day_of_week() >>> end >>> >>> This implementation relies on the knowledge that when called with >>> starting_on = :default (which is the default argument value) the returned >>> value is indeed 1 == Monday, 7 == Sunday. >>> >>> If there is any consensus I'll submit a PR. >>> >>> >>> >>> -- >>> 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 elixir-lang-core+unsubscr...@googlegroups.com. >>> To view this discussion visit >>> https://groups.google.com/d/msgid/elixir-lang-core/eeff3e35-448b-4dcf-ad4a-866bac76a819n%40googlegroups.com >>> <https://groups.google.com/d/msgid/elixir-lang-core/eeff3e35-448b-4dcf-ad4a-866bac76a819n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> >> -- >> 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 elixir-lang-core+unsubscr...@googlegroups.com. >> To view this discussion visit >> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4K1Avrg-Ro_%3DWdNTtwOM9CV-oWPPbn2rprG%2B5en9XPwOA%40mail.gmail.com >> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4K1Avrg-Ro_%3DWdNTtwOM9CV-oWPPbn2rprG%2B5en9XPwOA%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> >> >> >> -- >> 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 elixir-lang-core+unsubscr...@googlegroups.com. >> To view this discussion visit >> https://groups.google.com/d/msgid/elixir-lang-core/B942BE1E-5FC3-4A0E-AE31-19267B436AD1%40gmail.com >> <https://groups.google.com/d/msgid/elixir-lang-core/B942BE1E-5FC3-4A0E-AE31-19267B436AD1%40gmail.com?utm_medium=email&utm_source=footer> >> . >> > > -- > 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 elixir-lang-core+unsubscr...@googlegroups.com. > To view this discussion visit > https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4KREP%3D75b6OuKqGheXTDXPke_hou6rdEfw-2bVxGa7fOg%40mail.gmail.com > <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4KREP%3D75b6OuKqGheXTDXPke_hou6rdEfw-2bVxGa7fOg%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > > > -- > 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 elixir-lang-core+unsubscr...@googlegroups.com. > To view this discussion visit > https://groups.google.com/d/msgid/elixir-lang-core/265076E7-F3A2-41F3-A349-73E8CB73BCD1%40gmail.com > <https://groups.google.com/d/msgid/elixir-lang-core/265076E7-F3A2-41F3-A349-73E8CB73BCD1%40gmail.com?utm_medium=email&utm_source=footer> > . > -- 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 elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4Jma97LJDOw20cTTWVRYW%2BPR8%3DK_3uRFXkrwALzky7Kgg%40mail.gmail.com.