diff --git a/core/includes/form.inc b/core/includes/form.inc
index 27e4d50..9528c88 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -1227,6 +1227,36 @@ function theme_date($variables) {
   return '<input' . new Attribute($element['#attributes']) . ' />';
 }
 
+
+/**
+ * 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']) . ' />';
+}
+
 /**
  * Sets the value for a weight element, with zero as a default.
  */
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 3d57521..9372015 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -2697,6 +2697,9 @@ function drupal_common_theme() {
     'date' => array(
       'render element' => 'element',
     ),
+    'month' => array(
+      'render element' => 'element',
+    ),
     'checkboxes' => array(
       'render element' => 'element',
     ),
diff --git a/core/modules/system/lib/Drupal/system/Tests/Form/FormTest.php b/core/modules/system/lib/Drupal/system/Tests/Form/FormTest.php
index c261031..ff72330 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Form/FormTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Form/FormTest.php
@@ -94,6 +94,9 @@ function testRequiredFields() {
     $elements['file']['element'] = array('#title' => $this->randomName(), '#type' => 'file');
     $elements['file']['empty_values'] = $empty_strings;
 
+    $elements['month']['element'] = array('#title' => $this->randomName(), '#type' => 'month');
+    $elements['month']['empty_values'] = $empty_strings;
+
     // Regular expression to find the expected marker on required elements.
     $required_marker_preg = '@<(?:label|legend).*<span class="form-required" aria-hidden="true">\*</span>.*</(?:label|legend)>@';
 
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 1a2ad30..e3114df 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -498,6 +498,11 @@ function system_element_info() {
     '#theme' => 'date',
     '#theme_wrappers' => array('form_element'),
   );
+  $types['month'] = array(
+    '#input' => TRUE,
+    '#theme' => 'month',
+    '#theme_wrappers' => array('form_element'),
+  );
   $types['file'] = array(
     '#input' => TRUE,
     '#multiple' => FALSE,
diff --git a/core/themes/seven/style.css b/core/themes/seven/style.css
index aa699e0..aa9a677 100644
--- a/core/themes/seven/style.css
+++ b/core/themes/seven/style.css
@@ -754,6 +754,7 @@ label {
   vertical-align: middle;
 }
 .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,
