nresni

nresni

Retrieving the first and last day of previous month to build a query with a range date?

Hi,

I try to retrieve the first and last day of previous month to build a query with a range date.

Right now I’m doing this:

def foo(%DateTime{month: month, year: year} = current_date) do

  # eg. 2019-01-01 00:00:00
  start_date = %{current_date | month: month - 1, day: 1, hour: 00, minute: 00, second: 00}

  days_of_month = DateTime.to_date(start_date) |> Date.days_in_month()

  # eg. 2019-01-31 23:59:59
  end_date = DateTime.add(start_date, (days_of_month - 1) * 86_400 + 86_399, :seconds)

  ...
end

For the moment I don’t handle the year change :smile: , but before continuing I wanted to know if you had another way of doing it.

Thanks

Marked As Solved

LostKobrakai

LostKobrakai

Please don’t do such calculations on your own you’re bound to get into trouble with things like daylight-savings time switches or leap-seconds and things like that. Use a library like timex or calendar for calculations on datetimes.

Also Liked

rio517

rio517

Just in case someone stumbles across this, there are built-in functions to help with these calculations.

iex> Date.beginning_of_month(~D[2000-01-31])
~D[2000-01-01]
iex> Date.end_of_month(~D[2000-01-01])
~D[2000-01-31]
nresni

nresni

Oh yes, my bad, timex has everything I need.

Thanks

PJUllrich

PJUllrich

Author of Building Table Views with Phoenix LiveView

Just another note that since Elixir 1.17, you can shift a date using Date.shift/2.

So, to get the beginning and end of the previous month, you could do:

beginning_of_previous_month = 
    Date.utc_today() 
    |> Date.beginning_of_month()
    |> Date.shift(months: -1)

end_of_previous_month = Date.end_of_month(beginning_of_previous_month)

Where Next?

Popular in Questions Top

nobody
How to bind a phoenix app to a specific ip address? could not find anything about that, nowhere, unfortunately, but for me this is quite...
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
marius95
Hello everyone, I try to use an Javascript Event Handler in my root.html.leex file. Therefore I created a function in the app.js file: ...
New
skosch
To my knowledge, put_in, Map.update etc. all have the one limitation of not automatically creating intermediate keys when needed (for exa...
New
lucidguppy
I have a super simple question about elixir - how would I take a file like this foo bar baz and output a new file that enumerates th...
New
RisingFromAshes
I’ve read in another post that it may be possible with a router helper - but I couldn’t find an appropriate one, and tbh, I’m still just ...
New
earth10
Hi, I’m just starting to build a side-project with Elixir and Phoenix and doing some basic test with Elixir alone. What strikes me is th...
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New

Other popular topics Top

vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a > b) do {:ok, "a"} end if (a < b) do {:ok, b} end if (a == b) do {:ok, "equa...
New
chrismccord
As promised, the first release candidate of Phoenix 1.3.0 is out! This release focuses on code generators with improved project structure...
New
TunkShif
This post is an instruction guide to help you setup your Neovim for Elixir development from scratch. It includes general information on h...
274 42158 114
New
pmjoe
I have a relationship of love and hate with Elixir. Lots of things are just absolutely right, but there are some things that are kind of ...
New
gausby
I asked this very same question on twitter and got some interesting feedback, but I thought it would be a good question to ask here as we...
1207 39523 209
New
AstonJ
Please see the new poll here: Which code editor or IDE do you use? (Poll) (2022 Edition) It’s been a while since we first asked this, I...
208 31307 143
New
RisingFromAshes
I’ve read in another post that it may be possible with a router helper - but I couldn’t find an appropriate one, and tbh, I’m still just ...
New
shijith.k
I am trying to start a new phoenix project with elixir 1.9, but mix phx.new does not work. It says that ** (Mix) The task "phx.new" could...
New
vegabook
I’m brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New

We're in Beta

About us Mission Statement