diff --git a/lib/gitlab/quick_actions/issue_and_merge_request_actions.rb b/lib/gitlab/quick_actions/issue_and_merge_request_actions.rb
index 597312edcd52d2d3bfa599152969c8b9cb96e3e1..c94deea0dfbfd45149a6c2c388cf8bc5a865b299 100644
--- a/lib/gitlab/quick_actions/issue_and_merge_request_actions.rb
+++ b/lib/gitlab/quick_actions/issue_and_merge_request_actions.rb
@@ -145,10 +145,18 @@ module IssueAndMergeRequestActions
 
         desc { _('Set time estimate') }
         explanation do |time_estimate|
-          formatted_time_estimate = format_time_estimate(time_estimate)
-          _("Sets time estimate to %{time_estimate}.") % { time_estimate: formatted_time_estimate } if formatted_time_estimate
+          next unless time_estimate
+
+          if time_estimate == 0
+            _('Removes time estimate.')
+          elsif time_estimate > 0
+            formatted_time_estimate = format_time_estimate(time_estimate)
+            _("Sets time estimate to %{time_estimate}.") % { time_estimate: formatted_time_estimate } if formatted_time_estimate
+          end
         end
         execution_message do |time_estimate|
+          next _('Removed time estimate.') if time_estimate == 0
+
           formatted_time_estimate = format_time_estimate(time_estimate)
           _("Set time estimate to %{time_estimate}.") % { time_estimate: formatted_time_estimate } if formatted_time_estimate
         end
diff --git a/spec/services/quick_actions/interpret_service_spec.rb b/spec/services/quick_actions/interpret_service_spec.rb
index 86e2340b9fb8d556ebf2406f45ef9fdec3081049..c78a304eda15e1d6e7d10234fc4eb734e79a325d 100644
--- a/spec/services/quick_actions/interpret_service_spec.rb
+++ b/spec/services/quick_actions/interpret_service_spec.rb
@@ -2690,12 +2690,44 @@
     end
 
     describe 'estimate command' do
-      let(:content) { '/estimate 79d' }
+      context 'positive estimation' do
+        let(:content) { '/estimate 79d' }
 
-      it 'includes the formatted duration' do
-        _, explanations = service.explain(content, merge_request)
+        it 'includes the formatted duration' do
+          _, explanations = service.explain(content, merge_request)
+
+          expect(explanations).to eq(['Sets time estimate to 3mo 3w 4d.'])
+        end
+      end
+
+      context 'zero estimation' do
+        let(:content) { '/estimate 0' }
+
+        it 'includes the formatted duration' do
+          _, explanations = service.explain(content, merge_request)
+
+          expect(explanations).to eq(['Removes time estimate.'])
+        end
+      end
+
+      context 'negative estimation' do
+        let(:content) { '/estimate -79d' }
 
-        expect(explanations).to eq(['Sets time estimate to 3mo 3w 4d.'])
+        it 'does not explain' do
+          _, explanations = service.explain(content, merge_request)
+
+          expect(explanations).to be_empty
+        end
+      end
+
+      context 'invalid estimation' do
+        let(:content) { '/estimate a' }
+
+        it 'does not explain' do
+          _, explanations = service.explain(content, merge_request)
+
+          expect(explanations).to be_empty
+        end
       end
     end