I'd love either of these proposals to be a reality, I often find myself building my own helpers in tests to do this sort of thing.
Initially I thought the function varient was better but if you look at it as "then we might have to add all these other functions" I found myself leaning towards allowing `:utc_now` as a placeholder in the existing api, it might be slightly more verbose but it leans towards a more compact core api overall... so that gets my +1. Cheers Jon On Wed, 8 Jan 2025, at 11:06 AM, José Valim wrote: > I'd love to see something along those lines but I can't pick a favorite. > > 1. Supporting :utc_now in "shift" could be a welcome addition, as we could > also support it in "add" and "diff" functions. However, I'd say it is more > verbose than from_utc_today. > > 2. from_utc_now/from_utc_today is clearer but less applicable. If we go this > route, we may find ourselves adding other functions, such as `add_to_utc_now` > and `diff_to_utc_now`. > > So I would love to hear everyone's thoughts. > > "Date.range/2" with a duration is a no-brainer though and we could add it > today. > > *José Valim* > https://dashbit.co/ > > > On Tue, Jan 7, 2025 at 5:43 PM Wojtek Mach <woj...@wojtekmach.pl> wrote: >> Hello, >> >> I'd like to propose adding the following functions: >> >> - `Date.from_utc_today(duration)` >> - `NaiveDateTime.from_utc_today(duration)` >> - `DateTime.from_utc_today(duration)` >> >> For example: >> >> # Say, now is ~U[2025-01-07 16:22:40.003901Z] >> >> iex> Date.from_utc_now(month: 1, day: 1) >> ~D[2025-02-08] >> >> iex> NaiveDateTime.from_utc_now(hour: -1) >> ~N[2025-01-07 15:22:40.003901] >> >> iex> DateTime.from_utc_now(Duration.new!(hour: 1)) >> ~U[2025-01-07 17:22:40.003901Z] >> >> I believe they are especially useful when writing tests and they might give >> opportunity for some optimizations. >> >> Another idea is to instead allow passing `:utc_today` / `:utc_now` to the >> existing shift/2 functions: >> >> iex> Date.shift(:utc_today, month: 1, day: 1) >> ~D[2025-02-08] >> >> iex> NaiveDateTime.shift(:utc_now, hour: -1) >> ~N[2025-01-07 15:22:40.003901] >> >> iex> DateTime.from_utc_now(:utc_now, hour: 1) >> ~U[2025-01-07 17:22:40.003901Z] >> >> Btw and this is a related but separate conversion, I think a >> `Date.range(date, duration)` would be a nice addition. And so, I believe a >> `Date.range(:utc_today, month: 1)` would be a natural extension of this. I'm >> not sure if supporting `Date.add(:utc_today, 1)` and similar is worth it, >> perhaps just for consistency. >> >> >> -- >> 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/2851ea28-d20e-4e8d-b957-38a582f7fa39n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/elixir-lang-core/2851ea28-d20e-4e8d-b957-38a582f7fa39n%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/CAGnRm4L9iSWc7zD8v_%2BqNhsOhx10atYksuPO5gbGCMvvz88sPA%40mail.gmail.com > > <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4L9iSWc7zD8v_%2BqNhsOhx10atYksuPO5gbGCMvvz88sPA%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/3952efd8-06a4-4855-9277-8208b5c8068f%40app.fastmail.com.