diff --git a/vendor/magento/framework/View/Element/Html/Calendar.php b/vendor/magento/framework/View/Element/Html/Calendar.php
index 884488d77a74f..cf8f2e3e789e6 100644
--- a/vendor/magento/framework/View/Element/Html/Calendar.php
+++ b/vendor/magento/framework/View/Element/Html/Calendar.php
@@ -109,10 +109,7 @@ protected function _toHtml()
         );
 
         $this->assignFieldsValues($localeData);
-
-        // get "am" & "pm" words
-        $this->assign('am', $this->encoder->encode($localeData['calendar']['gregorian']['AmPmMarkers']['0']));
-        $this->assign('pm', $this->encoder->encode($localeData['calendar']['gregorian']['AmPmMarkers']['1']));
+        $this->assignAmPmWords($localeData);
 
         // get first day of week and weekend days
         $this->assign(
@@ -209,4 +206,23 @@ private function assignFieldsValues(\ResourceBundle $localeData): void
             $this->assign('week', $this->encoder->encode($localeData['fields']['week']['dn']));
         }
     }
+
+    /**
+     * Assign "am" & "pm" words from the ICU data
+     *
+     * @param \ResourceBundle $localeData
+     */
+    private function assignAmPmWords(\ResourceBundle $localeData): void
+    {
+        // AmPmMarkers and AmPmMarkersAbbr aren't guaranteed to exist, so fallback to null if neither exist
+        $amWord = $localeData['calendar']['gregorian']['AmPmMarkers'][0] ??
+                  $localeData['calendar']['gregorian']['AmPmMarkersAbbr'][0] ??
+                  null;
+        $pmWord = $localeData['calendar']['gregorian']['AmPmMarkers'][1] ??
+                  $localeData['calendar']['gregorian']['AmPmMarkersAbbr'][1] ??
+                  null;
+
+        $this->assign('am', $this->encoder->encode($amWord));
+        $this->assign('pm', $this->encoder->encode($pmWord));
+    }
 }

