diff --git a/core/includes/form.inc b/core/includes/form.inc
index 659ef5f..4315ece 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -910,6 +910,36 @@ function _batch_queue($batch_set) {
   }
 }
 
+
+/**
+ * Returns HTML for an #month form element.
+ *
+ * Supports HTML5 types of 'date', 'datetime', 'datetime-local', and 'time'.
+ * Falls back to a plain textfield. Used as a sub-element by the datetime
+ * element type.
+ *
+ * @param array $variables
+ *   An associative array containing:
+ *   - element: An associative array containing the properties of the element.
+ *     Properties used: #title, #value, #options, #description, #required,
+ *     #attributes, #id, #name, #type, #min, #max, #step, #value, #size.
+ *
+ * @return string
+ *   String form element.
+ *
+ * @ingroup themeable
+ */
+function theme_month($variables) {
+  $element = $variables['element'];
+  if (empty($element['attribute']['type'])) {
+    $element['attribute']['type'] = 'date';
+  }
+  element_set_attributes($element, array('id', 'name', 'type', 'min', 'max', 'step', 'value', 'size'));
+  _form_set_attributes($element, array('form-' . $element['attribute']['type']));
+
+  return '<input' . new Attribute($element['#attributes']) . ' />';
+}
+
 /**
  * @} End of "defgroup batch".
  */
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 27573e7..0490d78 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -1916,6 +1916,9 @@ function drupal_common_theme() {
     'radios' => array(
       'render element' => 'element',
     ),
+    'month' => array(
+      'render element' => 'element',
+    ),
     'checkboxes' => array(
       'render element' => 'element',
     ),
diff --git a/core/modules/system/src/Tests/Form/FormTest.php b/core/modules/system/src/Tests/Form/FormTest.php
index 22b3b84..cd6b09c 100644
--- a/core/modules/system/src/Tests/Form/FormTest.php
+++ b/core/modules/system/src/Tests/Form/FormTest.php
@@ -95,6 +95,9 @@ function testRequiredFields() {
     $elements['file']['element'] = array('#title' => $this->randomMachineName(), '#type' => 'file');
     $elements['file']['empty_values'] = $empty_strings;
 
+    $elements['month']['element'] = array('#title' => $this->randomMachineName(), '#type' => 'month');
+    $elements['month']['empty_values'] = $empty_strings;
+
     // Regular expression to find the expected marker on required elements.
     $required_marker_preg = '@<.*?class=".*?form-required.*?">@';
     // Go through all the elements and all the empty values for them.
diff --git a/core/themes/seven/css/components/form.css b/core/themes/seven/css/components/form.css
index 162db9f..417ae1f 100644
--- a/core/themes/seven/css/components/form.css
+++ b/core/themes/seven/css/components/form.css
@@ -45,6 +45,7 @@ label[for] {
 }
 
 .form-disabled input.form-text,
+.form-disabled input.form-month,
 .form-disabled input.form-tel,
 .form-disabled input.form-email,
 .form-disabled input.form-url,
