diff --git a/ee/app/controllers/admin/audit_log_reports_controller.rb b/ee/app/controllers/admin/audit_log_reports_controller.rb
index ff17532fee102411a27df044451978d616884d2b..3bce589f96f7778e2e6190bdebb031c1b466cc16 100644
--- a/ee/app/controllers/admin/audit_log_reports_controller.rb
+++ b/ee/app/controllers/admin/audit_log_reports_controller.rb
@@ -1,6 +1,7 @@
 # frozen_string_literal: true
 
 class Admin::AuditLogReportsController < Admin::ApplicationController
+  include AuditEvents::EnforcesValidDateParams
   include AuditEvents::DateRange
 
   before_action :validate_audit_log_reports_available!
diff --git a/ee/app/controllers/concerns/audit_events/enforces_valid_date_params.rb b/ee/app/controllers/concerns/audit_events/enforces_valid_date_params.rb
index abd1838eb40f92d4ff20f24f8a778eab2a8e34ac..7420ac50f093a2c3e1c748b966686162923813e9 100644
--- a/ee/app/controllers/concerns/audit_events/enforces_valid_date_params.rb
+++ b/ee/app/controllers/concerns/audit_events/enforces_valid_date_params.rb
@@ -12,12 +12,24 @@ module EnforcesValidDateParams
 
     def validate_date_params
       unless valid_utc_date?(params[:created_before]) && valid_utc_date?(params[:created_after])
-        flash[:alert] = _('Invalid date format. Please use UTC format as YYYY-MM-DD')
+        respond_to do |format|
+          format.html do
+            flash[:alert] = _('Invalid date format. Please use UTC format as YYYY-MM-DD')
+            render status: :bad_request
+          end
+          format.any { head :bad_request }
+        end
       end
     end
 
     def valid_utc_date?(date)
-      date.blank? || date =~ Gitlab::Regex.utc_date_regex
+      return true if date.blank?
+
+      return false unless date =~ Gitlab::Regex.utc_date_regex
+
+      return true if Date.parse(date)
+    rescue Date::Error
+      false
     end
   end
 end
diff --git a/ee/spec/controllers/admin/audit_log_reports_controller_spec.rb b/ee/spec/controllers/admin/audit_log_reports_controller_spec.rb
index ae996570e539a45c9bb02ac2391e8399352d9b97..594743ee689b764772de25070513674a4a750f99 100644
--- a/ee/spec/controllers/admin/audit_log_reports_controller_spec.rb
+++ b/ee/spec/controllers/admin/audit_log_reports_controller_spec.rb
@@ -3,6 +3,8 @@
 require 'spec_helper'
 
 RSpec.describe Admin::AuditLogReportsController do
+  using RSpec::Parameterized::TableSyntax
+
   describe 'GET index' do
     let(:csv_data) do
       <<~CSV
@@ -105,6 +107,32 @@
             end
           end
         end
+
+        context 'when invalid date params are provided' do
+          let(:params) do
+            {
+              created_before: created_before,
+              created_after: created_after
+            }
+          end
+
+          where(:created_before, :created_after) do
+            'invalid-date' | nil
+            nil            | true
+            '2021-13-10'   | nil
+            nil            | '2021-02-31'
+            '2021-03-31'   | '2021-02-31'
+          end
+
+          with_them do
+            it 'returns an error' do
+              subject
+
+              expect(response).to have_gitlab_http_status(:bad_request)
+              expect(flash[:alert]).to eq nil
+            end
+          end
+        end
       end
 
       context 'when unlicensed' do
diff --git a/ee/spec/controllers/admin/audit_logs_controller_spec.rb b/ee/spec/controllers/admin/audit_logs_controller_spec.rb
index e7b9e097b6cd4e4ba1b0e8c8114038eecd4b1682..4feecb1d39a8bee8c898fdb62ec94244f83cde08 100644
--- a/ee/spec/controllers/admin/audit_logs_controller_spec.rb
+++ b/ee/spec/controllers/admin/audit_logs_controller_spec.rb
@@ -3,6 +3,8 @@
 require 'spec_helper'
 
 RSpec.describe Admin::AuditLogsController do
+  using RSpec::Parameterized::TableSyntax
+
   let_it_be(:admin) { create(:admin) }
 
   describe 'GET #index' do
@@ -42,6 +44,25 @@
           user: admin
         )
       end
+
+      context 'when invalid date' do
+        where(:created_before, :created_after) do
+          'invalid-date' | nil
+          nil            | true
+          '2021-13-10'   | nil
+          nil            | '2021-02-31'
+          '2021-03-31'   | '2021-02-31'
+        end
+
+        with_them do
+          it 'returns an error' do
+            get :index, params: { 'created_before': created_before, 'created_after': created_after }
+
+            expect(response).to have_gitlab_http_status(:bad_request)
+            expect(flash[:alert]).to eq 'Invalid date format. Please use UTC format as YYYY-MM-DD'
+          end
+        end
+      end
     end
 
     context 'by user' do
diff --git a/ee/spec/controllers/groups/audit_events_controller_spec.rb b/ee/spec/controllers/groups/audit_events_controller_spec.rb
index 474941bd36375192aa27136d282a9e1a106a24ca..be771142943460c4dcc71741c923db9e94b34e97 100644
--- a/ee/spec/controllers/groups/audit_events_controller_spec.rb
+++ b/ee/spec/controllers/groups/audit_events_controller_spec.rb
@@ -3,6 +3,8 @@
 require 'spec_helper'
 
 RSpec.describe Groups::AuditEventsController do
+  using RSpec::Parameterized::TableSyntax
+
   let_it_be(:user) { create(:user) }
   let_it_be(:owner) { create(:user) }
   let_it_be(:group) { create(:group, :private) }
@@ -139,6 +141,25 @@
               namespace: group
             )
           end
+
+          context 'when invalid date' do
+            where(:created_before, :created_after) do
+              'invalid-date' | nil
+              nil            | true
+              '2021-13-10'   | nil
+              nil            | '2021-02-31'
+              '2021-03-31'   | '2021-02-31'
+            end
+
+            with_them do
+              it 'returns an error' do
+                get :index, params: { group_id: group.to_param, 'created_before': created_before, 'created_after': created_after }
+
+                expect(response).to have_gitlab_http_status(:bad_request)
+                expect(flash[:alert]).to eq 'Invalid date format. Please use UTC format as YYYY-MM-DD'
+              end
+            end
+          end
         end
       end
 
diff --git a/ee/spec/controllers/projects/audit_events_controller_spec.rb b/ee/spec/controllers/projects/audit_events_controller_spec.rb
index 9a6fc319035ff6868eb3137e485ee51765931a84..f05c223093cf0725c2fca07c700a8be8473d2109 100644
--- a/ee/spec/controllers/projects/audit_events_controller_spec.rb
+++ b/ee/spec/controllers/projects/audit_events_controller_spec.rb
@@ -3,6 +3,8 @@
 require 'spec_helper'
 
 RSpec.describe Projects::AuditEventsController do
+  using RSpec::Parameterized::TableSyntax
+
   let_it_be(:user) { create(:user) }
   let_it_be(:maintainer) { create(:user) }
   let_it_be(:project) { create(:project, :private) }
@@ -110,6 +112,25 @@
             it_behaves_like 'orders by id descending'
           end
         end
+
+        context 'when invalid date' do
+          where(:created_before, :created_after) do
+            'invalid-date' | nil
+            nil            | true
+            '2021-13-10'   | nil
+            nil            | '2021-02-31'
+            '2021-03-31'   | '2021-02-31'
+          end
+
+          with_them do
+            it 'returns an error' do
+              get :index, params: { project_id: project.to_param, namespace_id: project.namespace.to_param, 'created_before': created_before, 'created_after': created_after }
+
+              expect(response).to have_gitlab_http_status(:bad_request)
+              expect(flash[:alert]).to eq 'Invalid date format. Please use UTC format as YYYY-MM-DD'
+            end
+          end
+        end
       end
 
       context 'pagination' do