diff --git a/app/views/events/_form.html.erb b/app/views/events/_form.html.erb
index fe725c838..0ec1b74ae 100644
--- a/app/views/events/_form.html.erb
+++ b/app/views/events/_form.html.erb
@@ -76,6 +76,7 @@
} %>
+ <%# Datetime values are already in the user's timezone via around_action :set_time_zone_from_user %>
<%= f.label :start_date,
diff --git a/spec/views/events/_form_timezone_spec.rb b/spec/views/events/_form_timezone_spec.rb
new file mode 100644
index 000000000..234b8c8e9
--- /dev/null
+++ b/spec/views/events/_form_timezone_spec.rb
@@ -0,0 +1,69 @@
+require "rails_helper"
+
+RSpec.describe "events/_form timezone handling", type: :view do
+ let(:user) { create(:user, time_zone: "Pacific Time (US & Canada)") }
+ let(:location) { create(:location) }
+
+ before do
+ assign(:locations, [ location ])
+ assign(:sectors, [])
+ assign(:categories_grouped, [])
+ allow(view).to receive(:current_user).and_return(user)
+ allow(view).to receive(:allowed_to?).and_return(true)
+ end
+
+ context "when displaying datetime-local fields with user timezone" do
+ let(:event) do
+ # Use January dates to avoid DST ambiguity (PST = UTC-8)
+ create(:event,
+ start_date: Time.utc(2026, 1, 15, 20, 0),
+ end_date: Time.utc(2026, 1, 15, 22, 0),
+ registration_close_date: Time.utc(2026, 1, 14, 20, 0))
+ end
+
+ it "converts times to user's timezone via around_action :set_time_zone_from_user" do
+ assign(:event, event.decorate)
+
+ # Simulate the around_action :set_time_zone_from_user in ApplicationController
+ Time.use_zone(user.time_zone) do
+ render
+
+ # PST is UTC-8, so 20:00 UTC = 12:00 PST
+ expect(rendered).to have_selector(
+ "input[name='event[start_date]'][value='2026-01-15T12:00']"
+ )
+
+ expect(rendered).to have_selector(
+ "input[name='event[end_date]'][value='2026-01-15T14:00']"
+ )
+
+ expect(rendered).to have_selector(
+ "input[name='event[registration_close_date]'][value='2026-01-14T12:00']"
+ )
+ end
+ end
+ end
+
+ context "when event has nil registration_close_date" do
+ let(:event) do
+ create(:event,
+ start_date: 2.days.from_now,
+ end_date: 3.days.from_now,
+ registration_close_date: nil)
+ end
+
+ it "handles nil registration_close_date gracefully" do
+ assign(:event, event.decorate)
+
+ Time.use_zone(user.time_zone) do
+ render
+
+ expect(rendered).to have_selector("input[name='event[start_date]']")
+ expect(rendered).to have_selector("input[name='event[end_date]']")
+ expect(rendered).to have_selector("input[name='event[registration_close_date]']")
+
+ expect(rendered).to have_selector("input[name='event[registration_close_date]'][value='']")
+ end
+ end
+ end
+end