diff --git a/src/wp-admin/options.php b/src/wp-admin/options.php
index 8348b24c8e941..3a8ef92ae8850 100644
--- a/src/wp-admin/options.php
+++ b/src/wp-admin/options.php
@@ -264,18 +264,24 @@
 		$options = $allowed_options[ $option_page ];
 	}

+	$using_locales_default_date_format = false;
+	$using_locales_default_time_format = false;
+
 	if ( 'general' === $option_page ) {
 		// Handle custom date/time formats.
 		if ( ! empty( $_POST['date_format'] ) && isset( $_POST['date_format_custom'] )
 			&& '\c\u\s\t\o\m' === wp_unslash( $_POST['date_format'] )
 		) {
 			$_POST['date_format'] = $_POST['date_format_custom'];
+		} elseif ( __( 'F j, Y' ) === $_POST['date_format'] ) {
+			$using_locales_default_date_format = true;
 		}

 		if ( ! empty( $_POST['time_format'] ) && isset( $_POST['time_format_custom'] )
 			&& '\c\u\s\t\o\m' === wp_unslash( $_POST['time_format'] )
 		) {
 			$_POST['time_format'] = $_POST['time_format_custom'];
+		} elseif ( __( 'g:i a' ) === $_POST['time_format'] ) {
+			$using_locales_default_time_format = true;
 		}

 		// Map UTC+- timezones to gmt_offsets and set timezone_string to empty.
@@ -353,6 +359,16 @@
 		$user_language_new = get_user_locale();
 		if ( $user_language_old !== $user_language_new ) {
 			load_default_textdomain( $user_language_new );
+
+			// Update formats only if locale defaults were previously used.
+			if ( $using_locales_default_date_format ) {
+				update_option( 'date_format', __( 'F j, Y' ) );
+			}
+
+			if ( $using_locales_default_time_format ) {
+				update_option( 'time_format', __( 'g:i a' ) );
+			}
 		}
 	} else {
 		add_settings_error( 'general', 'settings_updated', __( 'Settings save failed.' ), 'error' );
diff --git a/tests/phpunit/tests/i18n/test-switching-locale-updates-date-time-formats.php b/tests/phpunit/tests/i18n/test-switching-locale-updates-date-time-formats.php
new file mode 100644
index 0000000000000..92f54494f9451
--- /dev/null
+++ b/tests/phpunit/tests/i18n/test-switching-locale-updates-date-time-formats.php
@@ -0,0 +1,120 @@
+<?php
+/**
+ * @ticket 36259
+ * @group i18n
+ */
+
+class Tests_I18n_Switching_Locale_Updates_Date_Time_Formats extends WP_UnitTestCase {
+
+	private $orig_locale;
+	private $orig_date_format;
+	private $orig_time_format;
+
+	public function set_up() {
+		parent::set_up();
+
+		$this->orig_locale      = get_locale();
+		$this->orig_date_format = get_option( 'date_format' );
+		$this->orig_time_format = get_option( 'time_format' );
+
+		switch_to_locale( 'en_US' );
+		update_option( 'date_format', 'F j, Y' );
+		update_option( 'time_format', 'g:i a' );
+	}
+
+	public function tear_down() {
+		switch_to_locale( $this->orig_locale );
+		update_option( 'date_format', $this->orig_date_format );
+		update_option( 'time_format', $this->orig_time_format );
+
+		parent::tear_down();
+	}
+
+	public function test_switching_locale_updates_formats_when_defaults_used() {
+		global $l10n;
+
+		$translations = new MO();
+		$translations->add_entry(
+			new Translation_Entry(
+				array(
+					'singular'     => 'F j, Y',
+					'translations' => array( 'j F Y' ),
+				)
+			)
+		);
+		$translations->add_entry(
+			new Translation_Entry(
+				array(
+					'singular'     => 'g:i a',
+					'translations' => array( 'H:i' ),
+				)
+			)
+		);
+
+		$l10n['default'] = &$translations;
+
+		switch_to_locale( 'en_GB' );
+
+		update_option( 'date_format', __( 'F j, Y' ) );
+		update_option( 'time_format', __( 'g:i a' ) );
+
+		$this->assertSame( 'j F Y', get_option( 'date_format' ) );
+		$this->assertSame( 'H:i', get_option( 'time_format' ) );
+	}
+}