diff --git a/src/Plugin/WebformElement/Date.php b/src/Plugin/WebformElement/Date.php
index 63c1bd261..e4af310fc 100644
--- a/src/Plugin/WebformElement/Date.php
+++ b/src/Plugin/WebformElement/Date.php
@@ -50,7 +50,7 @@ class Date extends DateBase {
     // Unset custom date format which is only used by the
     // webform_jqueryui_datepicker.module.
     $has_datepicker = isset($element['#datepicker']) && $this->moduleHandler->moduleExists('webform_jqueryui_datepicker');
-    if (isset($element['#date_date_format']) && !$has_datepicker) {
+    if (isset($element['#date_date_format']) && !$has_datepicker && $element['#date_date_format'] != "Y-m") {
       unset($element['#date_date_format']);
     }
 
@@ -67,7 +67,12 @@ class Date extends DateBase {
 
     // Set the (input) type attribute to 'date'.
     // @see \Drupal\Core\Render\Element\Date::getInfo
-    $element['#attributes']['type'] = 'date';
+    if($element['#date_date_format'] == "Y-m") {
+      $element['#attributes']['type'] = 'month';
+    }
+    else {
+      $element['#attributes']['type'] = 'date';
+    }
   }
 
   /**
diff --git a/src/Plugin/WebformElement/DateBase.php b/src/Plugin/WebformElement/DateBase.php
index 96508cfe4..d2cf5ffbc 100644
--- a/src/Plugin/WebformElement/DateBase.php
+++ b/src/Plugin/WebformElement/DateBase.php
@@ -142,6 +142,12 @@ abstract class DateBase extends WebformElementBase {
       return;
     }
 
+    if($element['#date_date_format'] == "Y-m" && !is_null($element['#default_value']) && strlen($element["#default_value"]) == 10) {
+      $default_value = $element["#default_value"];
+      $element['#default_value'] = substr($element["#default_value"], 0, -3);
+      return;
+    }
+    
     // Datelist and Datetime require #default_value to be DrupalDateTime.
     if (in_array($element['#type'], ['datelist', 'datetime'])) {
       if (!empty($element['#default_value']) && is_string($element['#default_value'])) {
@@ -532,19 +538,26 @@ abstract class DateBase extends WebformElementBase {
       $value = ($value['object']) ? $value['object']->format(DateFormat::load('html_datetime')->getPattern()) : '';
     }
     elseif ($value) {
-      $datetime = WebformDateHelper::createFromFormat($date_date_format, $value);
-      if ($datetime === FALSE || static::formatDate($date_date_format, $datetime->getTimestamp()) !== $value) {
-        $form_state->setError($element, t('%name must be a valid date.', ['%name' => $name]));
-        $value = '';
+      if($date_date_format == "Y-m") {
+        $datetime = DrupalDateTime::createFromFormat("U", strtotime($value));
+        $datetime->setTime(0, 0, 0);
+        $value = $datetime->format(DateFormat::load('html_month')->getPattern());
       }
       else {
-        // Clear timestamp to date elements.
-        if ($element['#type'] === 'date') {
-          $datetime->setTime(0, 0, 0);
-          $value = $datetime->format(DateFormat::load('html_date')->getPattern());
+        $datetime = WebformDateHelper::createFromFormat($date_date_format, $value);
+        if ($datetime === FALSE || static::formatDate($date_date_format, $datetime->getTimestamp()) !== $value) {
+          $form_state->setError($element, t('%name must be a valid date.', ['%name' => $name]));
+          $value = '';
         }
         else {
-          $value = $datetime->format(DateFormat::load('html_datetime')->getPattern());
+          // Clear timestamp to date elements.
+          if ($element['#type'] === 'date') {
+            $datetime->setTime(0, 0, 0);
+            $value = $datetime->format(DateFormat::load('html_date')->getPattern());
+          }
+          else {
+            $value = $datetime->format(DateFormat::load('html_datetime')->getPattern());
+          }
         }
       }
     }
