diff --git a/src/Utility/WebformDateHelper.php b/src/Utility/WebformDateHelper.php
index 9a6951e7..3f2406a0 100644
--- a/src/Utility/WebformDateHelper.php
+++ b/src/Utility/WebformDateHelper.php
@@ -141,12 +141,20 @@ class WebformDateHelper {
     if (!isset(self::$intervalOptions)) {
       $options = ['' => t('ever')];
 
+      // Seconds.
+      $seconds_optgroup = (string) t('Second');
+      $increment = 0;
+      while ($increment < 55) {
+        $increment += 5;
+        $options[$seconds_optgroup][($increment)] = t('every @increment seconds', ['@increment' => $increment]);
+      }
+
       // Minute.
       $minute = 60;
       $minute_optgroup = (string) t('Minute');
       $options[$minute_optgroup][$minute] = t('every minute');
       $increment = 5;
-      while ($increment < 60) {
+      while ($increment < 55) {
         $increment += 5;
         $options[$minute_optgroup][($increment * $minute)] = t('every @increment minutes', ['@increment' => $increment]);
       }
@@ -156,7 +164,7 @@ class WebformDateHelper {
       $hour_optgroup = (string) t('Hour');
       $options[$hour_optgroup][$hour] = t('every hour');
       $increment = 1;
-      while ($increment < 24) {
+      while ($increment < 23) {
         $increment += 1;
         $options[$hour_optgroup][($increment * $hour)] = t('every @increment hours', ['@increment' => $increment]);
       }
@@ -166,7 +174,7 @@ class WebformDateHelper {
       $day_optgroup = (string) t('Day');
       $options[$day_optgroup][$day] = t('every day');
       $increment = 1;
-      while ($increment < 7) {
+      while ($increment < 6) {
         $increment += 1;
         $options[$day_optgroup][($increment * $day)] = t('every @increment days', ['@increment' => $increment]);
       }
@@ -176,7 +184,7 @@ class WebformDateHelper {
       $week_optgroup = (string) t('Week');
       $options[$week_optgroup][$week] = t('every week');
       $increment = 1;
-      while ($increment < 52) {
+      while ($increment < 51) {
         $increment += 1;
         $options[$week_optgroup][($increment * $week)] = t('every @increment weeks', ['@increment' => $increment]);
       }
diff --git a/src/WebformSubmissionForm.php b/src/WebformSubmissionForm.php
index c99a428b..d160403d 100644
--- a/src/WebformSubmissionForm.php
+++ b/src/WebformSubmissionForm.php
@@ -856,20 +856,22 @@ class WebformSubmissionForm extends ContentEntityForm {
 
     // Check total limit.
     if ($this->checkTotalLimit() && empty($this->getWebformSetting('limit_total_unique'))) {
-      $form = $this->getMessageManager()->append($form, WebformMessageManagerInterface::LIMIT_TOTAL_MESSAGE);
+      $form = $this->getMessageManager()->append($form, WebformMessageManagerInterface::LIMIT_TOTAL_MESSAGE, 'warning');
       if ($webform->access('submission_update_any')) {
         $form = $this->getMessageManager()->append($form, WebformMessageManagerInterface::ADMIN_CLOSED, 'info');
+        return FALSE;
       }
       else {
         return $form;
       }
-    }
+  }
 
     // Check user limit.
     if ($this->checkUserLimit() && empty($this->getWebformSetting('limit_user_unique'))) {
       $form = $this->getMessageManager()->append($form, WebformMessageManagerInterface::LIMIT_USER_MESSAGE, 'warning');
       if ($webform->access('submission_update_any')) {
         $form = $this->getMessageManager()->append($form, WebformMessageManagerInterface::ADMIN_CLOSED, 'info');
+        return FALSE;
       }
       else {
         return $form;
diff --git a/tests/modules/webform_test/config/install/webform.webform.test_form_limit_wait.yml b/tests/modules/webform_test/config/install/webform.webform.test_form_limit_wait.yml
new file mode 100644
index 00000000..26e18611
--- /dev/null
+++ b/tests/modules/webform_test/config/install/webform.webform.test_form_limit_wait.yml
@@ -0,0 +1,182 @@
+langcode: en
+status: open
+dependencies:
+  enforced:
+    module:
+      - webform_test
+open: null
+close: null
+weight: 0
+uid: null
+template: false
+archive: false
+id: test_form_limit_wait
+title: 'Test: Form: Submission limit wait'
+description: 'Test submission and user limit wait.'
+category: 'Test: Form'
+elements: |
+  name:
+    '#type': textfield
+    '#title': Name
+  
+css: ''
+javascript: ''
+settings:
+  ajax: false
+  ajax_scroll_top: form
+  page: true
+  page_submit_path: ''
+  page_confirm_path: ''
+  form_title: source_entity_webform
+  form_submit_once: false
+  form_exception_message: ''
+  form_open_message: ''
+  form_close_message: ''
+  form_previous_submissions: true
+  form_confidential: false
+  form_confidential_message: ''
+  form_remote_addr: true
+  form_convert_anonymous: false
+  form_prepopulate: true
+  form_prepopulate_source_entity: false
+  form_prepopulate_source_entity_required: false
+  form_prepopulate_source_entity_type: ''
+  form_reset: false
+  form_disable_autocomplete: false
+  form_novalidate: false
+  form_disable_inline_errors: false
+  form_required: false
+  form_unsaved: false
+  form_disable_back: false
+  form_submit_back: false
+  form_autofocus: false
+  form_details_toggle: false
+  form_access_denied: default
+  form_access_denied_title: ''
+  form_access_denied_message: ''
+  form_access_denied_attributes: {  }
+  form_file_limit: ''
+  submission_label: ''
+  submission_log: false
+  submission_views: {  }
+  submission_views_replace:
+    webform_routes: {  }
+    node_routes: {  }
+  submission_user_columns: {  }
+  submission_user_duplicate: false
+  submission_access_denied: default
+  submission_access_denied_title: ''
+  submission_access_denied_message: ''
+  submission_access_denied_attributes: {  }
+  submission_exception_message: ''
+  submission_locked_message: ''
+  submission_excluded_elements: {  }
+  submission_exclude_empty: false
+  submission_exclude_empty_checkbox: false
+  previous_submission_message: ''
+  previous_submissions_message: ''
+  autofill: false
+  autofill_message: ''
+  autofill_excluded_elements: {  }
+  wizard_progress_bar: true
+  wizard_progress_pages: false
+  wizard_progress_percentage: false
+  wizard_progress_link: false
+  wizard_start_label: ''
+  wizard_preview_link: false
+  wizard_confirmation: true
+  wizard_confirmation_label: ''
+  wizard_track: ''
+  preview: 0
+  preview_label: ''
+  preview_title: ''
+  preview_message: ''
+  preview_attributes: {  }
+  preview_excluded_elements: {  }
+  preview_exclude_empty: true
+  preview_exclude_empty_checkbox: false
+  draft: authenticated
+  draft_multiple: false
+  draft_auto_save: false
+  draft_saved_message: ''
+  draft_loaded_message: ''
+  confirmation_type: message
+  confirmation_title: ''
+  confirmation_message: ''
+  confirmation_url: ''
+  confirmation_attributes: {  }
+  confirmation_back: true
+  confirmation_back_label: ''
+  confirmation_back_attributes: {  }
+  confirmation_exclude_query: false
+  confirmation_exclude_token: false
+  limit_total: 4
+  limit_total_interval: 30
+  limit_total_message: |
+    webform_submission:interval:webform:wait =&gt; [webform_submission:interval:webform:wait]<br />
+    webform_submission:interval:webform:source_entity:wait =&gt; [webform_submission:interval:webform:source_entity:wait]
+  limit_total_unique: false
+  limit_user: 1
+  limit_user_interval: 15
+  limit_user_message: |
+    <pre>
+    webform_submission:interval:user:wait =&gt; [webform_submission:interval:user:wait]
+    webform_submission:interval:user:source_entity:wait =&gt; [webform_submission:interval:user:source_entity:wait]</pre>
+  limit_user_unique: false
+  entity_limit_total: 2
+  entity_limit_total_interval: 30
+  entity_limit_user: 1
+  entity_limit_user_interval: 15
+  purge: none
+  purge_days: null
+  results_disabled: false
+  results_disabled_ignore: true
+  token_update: false
+access:
+  create:
+    roles:
+      - anonymous
+      - authenticated
+    users: {  }
+    permissions: {  }
+  view_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  update_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  delete_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  purge_any:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  view_own:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  update_own:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  delete_own:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  administer:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  test:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+  configuration:
+    roles: {  }
+    users: {  }
+    permissions: {  }
+handlers: {  }
diff --git a/webform.tokens.inc b/webform.tokens.inc
index 24c831b0..e8792f25 100644
--- a/webform.tokens.inc
+++ b/webform.tokens.inc
@@ -8,14 +8,17 @@
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Component\Render\MarkupInterface;
 use Drupal\Core\Datetime\Entity\DateFormat;
+use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Render\BubbleableMetadata;
 use Drupal\Core\Render\Markup;
+use Drupal\Core\Session\AccountInterface;
 use Drupal\user\Entity\User;
 use Drupal\webform\Plugin\WebformElementManagerInterface;
 use Drupal\webform\Plugin\WebformElementEntityReferenceInterface;
 use Drupal\webform\Plugin\WebformElement\WebformComputedBase;
 use Drupal\webform\Utility\WebformDateHelper;
 use Drupal\webform\Utility\WebformLogicHelper;
+use Drupal\webform\WebformInterface;
 use Drupal\webform\WebformSubmissionInterface;
 use Drupal\Core\Url;
 
@@ -97,6 +100,10 @@ function webform_token_info() {
     'name' => t('Total submissions limit interval'),
     'description' => t('The total submissions interval for the webform.'),
   ];
+  $webform_submission['interval:webform:wait'] = [
+    'name' => t('Total submissions limit'),
+    'description' => t('The amount of time before the next allowed submission for the webform.'),
+  ];
   $webform_submission['total:webform'] = [
     'name' => t('Total submissions'),
     'description' => t('The current number of submissions for the webform.'),
@@ -109,6 +116,10 @@ function webform_token_info() {
     'name' => t('Per user submission limit interval'),
     'description' => t('The total submissions interval per user for the webform.'),
   ];
+  $webform_submission['interval:user:wait'] = [
+    'name' => t('Total submissions limit'),
+    'description' => t('The amount of time before the next allowed submission per user for the webform.'),
+  ];
   $webform_submission['total:user'] = [
     'name' => t('Per user total submissions'),
     'description' => t('The current number of submissions for the user for the webform.'),
@@ -121,6 +132,10 @@ function webform_token_info() {
     'name' => t('Total submissions limit interval per source entity'),
     'description' => t('The total submissions interval for the webform source entity.'),
   ];
+  $webform_submission['interval:webform:source_entity:wait'] = [
+    'name' => t('Total submissions limit'),
+    'description' => t('The amount of time before the next allowed submission for the webform source entity.'),
+  ];
   $webform_submission['total:webform:source_entity'] = [
     'name' => t('Total submissions for source entity'),
     'description' => t('The current number of submissions for the webform source entity.'),
@@ -133,6 +148,10 @@ function webform_token_info() {
     'name' => t('Per user submission limit interval per source entity'),
     'description' => t('The total submissions interval per user for the webform source entity.'),
   ];
+  $webform_submission['interval:user:source_entity:wait'] = [
+    'name' => t('Total submissions limit'),
+    'description' => t('The amount of time before the next allowed submission per user for the webform source entity.'),
+  ];
   $webform_submission['total:user:source_entity'] = [
     'name' => t('Per user total submissions for source entity'),
     'description' => t('The current number of submissions for the user for the webform source entity.'),
@@ -489,6 +508,10 @@ function webform_tokens($type, $tokens, array $data, array $options, BubbleableM
           $replacements[$original] = WebformDateHelper::getIntervalText($webform->getSetting('limit_total_interval'));
           break;
 
+        case 'interval:webform:wait':
+          $replacements[$original] = _webform_token_get_interval_wait('limit_total_interval', $webform);
+          break;
+
         case 'total:webform':
           $replacements[$original] = $submission_storage->getTotal($webform);
           break;
@@ -501,6 +524,10 @@ function webform_tokens($type, $tokens, array $data, array $options, BubbleableM
           $replacements[$original] = WebformDateHelper::getIntervalText($webform->getSetting('limit_user_interval'));
           break;
 
+        case 'interval:user:wait':
+          $replacements[$original] = _webform_token_get_interval_wait('limit_user_interval', $webform, NULL, $account);
+          break;
+
         case 'total:user':
           $replacements[$original] = $submission_storage->getTotal($webform, NULL, $account);
           break;
@@ -513,6 +540,10 @@ function webform_tokens($type, $tokens, array $data, array $options, BubbleableM
           $replacements[$original] = WebformDateHelper::getIntervalText($webform->getSetting('entity_limit_total_interval'));
           break;
 
+        case 'interval:webform:source_entity:wait':
+          $replacements[$original] = $source_entity ? _webform_token_get_interval_wait('entity_limit_total_interval', $webform, $source_entity) : '';
+          break;
+
         case 'total:webform:source_entity':
           $replacements[$original] = $source_entity ? $submission_storage->getTotal($webform, $source_entity) : '';
           break;
@@ -525,6 +556,10 @@ function webform_tokens($type, $tokens, array $data, array $options, BubbleableM
           $replacements[$original] = WebformDateHelper::getIntervalText($webform->getSetting('entity_limit_user_interval'));
           break;
 
+        case 'interval:user:source_entity:wait':
+          $replacements[$original] = $source_entity ? _webform_token_get_interval_wait('entity_limit_user_interval', $webform, $source_entity, $account) : '';
+          break;
+
         case 'total:user:source_entity':
           $replacements[$original] = $source_entity ? $submission_storage->getTotal($webform, $source_entity, $account) : '';
           break;
@@ -879,3 +914,35 @@ function _webform_token_render_more($more_title, $more) {
   ];
   return (string) \Drupal::service('renderer')->renderPlain($build);
 }
+
+/**
+ * Get interval wait time.
+ *
+ * @param string $interval_setting
+ *   Interval setting name
+ * @param \Drupal\webform\WebformInterface|null $webform
+ *   (optional) A webform. If set the total number of submissions for the
+ *   Webform will be returned.
+ * @param \Drupal\Core\Entity\EntityInterface|null $source_entity
+ *   (optional) A webform submission source entity.
+ * @param \Drupal\Core\Session\AccountInterface|null $account
+ *   (optional) A user account.
+ *
+ * @return string
+ *   Formatted interval wait time.
+ */
+function _webform_token_get_interval_wait($interval_setting, WebformInterface $webform = NULL, EntityInterface $source_entity = NULL, AccountInterface $account = NULL) {
+  // Get last submission completed time.
+  /** @var \Drupal\webform\WebformSubmissionStorageInterface $submission_storage */
+  $submission_storage = \Drupal::entityTypeManager()->getStorage('webform_submission');
+  $last_submission = $submission_storage->getLastSubmission($webform, $source_entity, $account);
+  $completed_time = $last_submission->getCompletedTime();
+
+  // Get interval.
+  $interval = $webform->getSetting($interval_setting);
+
+  // Format time diff until next allows submission.
+  /** @var \Drupal\Core\Datetime\DateFormatterInterface $date_formatter */
+  $date_formatter = \Drupal::service('date.formatter');
+  return $date_formatter->formatTimeDiffUntil($completed_time + $interval);
+}
