diff --git a/packages/@react-spectrum/datepicker/test/TimeField.test.js b/packages/@react-spectrum/datepicker/test/TimeField.test.js
index b1b0570bf1d..0b6bee9627d 100644
--- a/packages/@react-spectrum/datepicker/test/TimeField.test.js
+++ b/packages/@react-spectrum/datepicker/test/TimeField.test.js
@@ -13,7 +13,7 @@
import {act, fireEvent, pointerMap, render as render_, within} from '@react-spectrum/test-utils-internal';
import {Button} from '@react-spectrum/button';
import {Form} from '@react-spectrum/form';
-import {parseZonedDateTime, Time} from '@internationalized/date';
+import {parseTime, parseZonedDateTime, Time} from '@internationalized/date';
import {Provider} from '@react-spectrum/provider';
import React from 'react';
import {theme} from '@react-spectrum/theme-default';
@@ -167,6 +167,23 @@ describe('TimeField', function () {
expect(onFocusSpy).toHaveBeenCalledTimes(1);
});
+ it('should keep dayPeriod the same when hour segment that has a value >= 12 is cleared', async function () {
+ let {getAllByRole} = render();
+ let segments = getAllByRole('spinbutton');
+
+ await user.tab();
+ expect(segments[0]).toHaveFocus();
+ expect(segments[0]).toHaveAttribute('aria-valuetext', '8 PM');
+ expect(segments[2].getAttribute('aria-label')).toBe('AM/PM, ');
+ expect(within(segments[2]).getByText('PM')).toBeInTheDocument();
+
+ fireEvent.keyDown(document.activeElement, {key: 'Backspace'});
+ fireEvent.keyUp(document.activeElement, {key: 'Backspace'});
+ expect(segments[0]).toHaveAttribute('aria-valuetext', 'Empty');
+ expect(segments[2].getAttribute('aria-label')).toBe('AM/PM, ');
+ expect(within(segments[2]).getByText('PM')).toBeInTheDocument();
+ });
+
it('should trigger right arrow key event for segment navigation', async function () {
let {getAllByRole} = render();
let segments = getAllByRole('spinbutton');
diff --git a/packages/@react-stately/datepicker/src/useDateFieldState.ts b/packages/@react-stately/datepicker/src/useDateFieldState.ts
index da1eed6d66c..6eaf4426995 100644
--- a/packages/@react-stately/datepicker/src/useDateFieldState.ts
+++ b/packages/@react-stately/datepicker/src/useDateFieldState.ts
@@ -399,6 +399,8 @@ export function useDateFieldState(props: DateFi
} else if (!isPM && shouldBePM) {
value = displayValue.set({hour: displayValue.hour + 12});
}
+ } else if (part === 'hour' && 'hour' in displayValue && displayValue.hour >= 12 && validSegments.dayPeriod) {
+ value = displayValue.set({hour: placeholder['hour'] + 12});
} else if (part in displayValue) {
value = displayValue.set({[part]: placeholder[part]});
}