diff --git a/assets/js/app.js b/assets/js/app.js
index 7ce5b62..492550a 100644
--- a/assets/js/app.js
+++ b/assets/js/app.js
@@ -25,7 +25,10 @@ import topbar from "../vendor/topbar"
let csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute("content")
let liveSocket = new LiveSocket("/live", Socket, {
longPollFallbackMs: 2500,
- params: {_csrf_token: csrfToken}
+ params: {
+ _csrf_token: csrfToken,
+ timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
+ }
})
// Show progress bar on live navigation and form submits
diff --git a/lib/slax_web/live/chat_room_live.ex b/lib/slax_web/live/chat_room_live.ex
index 294739c..4f5dec5 100644
--- a/lib/slax_web/live/chat_room_live.ex
+++ b/lib/slax_web/live/chat_room_live.ex
@@ -87,7 +87,12 @@ defmodule SlaxWeb.ChatRoomLive do
- <.message :for={{dom_id, message} <- @streams.messages} dom_id={dom_id} message={message} />
+ <.message
+ :for={{dom_id, message} <- @streams.messages}
+ dom_id={dom_id}
+ message={message}
+ timezone={@timezone}
+ />
<.form
@@ -119,7 +124,9 @@ defmodule SlaxWeb.ChatRoomLive do
def mount(_params, _session, socket) do
rooms = Chat.list_rooms()
- {:ok, assign(socket, hide_topic?: false, rooms: rooms)}
+ timezone = get_connect_params(socket)["timezone"]
+
+ {:ok, assign(socket, hide_topic?: false, rooms: rooms, timezone: timezone)}
end
@impl Phoenix.LiveView
@@ -194,6 +201,7 @@ defmodule SlaxWeb.ChatRoomLive do
attr :dom_id, :string, required: true
attr :message, Message, required: true
+ attr :timezone, :string, required: true
defp message(assigns) do
~H"""
@@ -204,7 +212,9 @@ defmodule SlaxWeb.ChatRoomLive do
<.link class="text-sm font-semibold hover:underline">
<%= username(@message.user) %>
-
<%= message_timestamp(@message) %>
+
+ <%= message_timestamp(@message, @timezone) %>
+
<%= @message.body %>
@@ -216,8 +226,10 @@ defmodule SlaxWeb.ChatRoomLive do
user.email |> String.split("@") |> List.first() |> String.capitalize()
end
- defp message_timestamp(message) do
- Timex.format!(message.inserted_at, "%-l:%M %p", :strftime)
+ defp message_timestamp(message, timezone) do
+ message.inserted_at
+ |> Timex.Timezone.convert(timezone)
+ |> Timex.format!("%-l:%M %p", :strftime)
end
defp assign_message_form(socket, changeset) do