diff --git a/token.tokens.inc b/token.tokens.inc
index 7685b63..4e2dfad 100644
--- a/token.tokens.inc
+++ b/token.tokens.inc
@@ -1334,10 +1334,19 @@ function field_token_info_alter(&$info) {
           ];
         }
       }
+      // Provide format token for datetime fields.
+      if ($field->getType() == 'datetime') {
+        $info['tokens'][$field_token_name]['format'] = [
+          'name' => t('Format'),
+          'description' => t('Date Format'),
+          'type' => 'date',
+        ];
+      }
     }
   }
 }
 
+
 /**
  * Returns the label of a certain field.
  *
@@ -1565,6 +1574,13 @@ function field_tokens($type, $tokens, array $data = array(), array $options = ar
           }
         }
       }
+      elseif(($field_item->getFieldDefinition()->getType() == 'datetime')) {
+        $date_tokens = \Drupal::token()->findWithPrefix($tokens, 'format');
+        if($date_tokens){
+          $datetime = strtotime($field_item->value);
+          $replacements = \Drupal::token()->generate('date', $date_tokens, array('date' => $datetime), $options, $bubbleable_metadata);
+        }
+      }
       else {
         $replacements[$original] = $field_item->$property_name;
       }
