diff --git a/src/Tests/TokenFieldDatetimeTest.php b/src/Tests/TokenFieldDatetimeTest.php
new file mode 100644
index 0000000..8d07f54
--- /dev/null
+++ b/src/Tests/TokenFieldDatetimeTest.php
@@ -0,0 +1,143 @@
+<?php
+
+namespace Drupal\token\Tests;
+
+use Drupal\datetime\Plugin\Field\FieldType\DateTimeItem;
+use Drupal\datetime_range\Plugin\Field\FieldType\DateRangeItem;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\node\Entity\NodeType;
+use Drupal\node\Entity\Node;
+
+
+/**
+ * Tests datetime token support for datetime field.
+ *
+ * @group token
+ */
+class TokenFieldDatetimeTest extends TokenTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['node', 'field', 'datetime', 'datetime_range'];
+
+  /**
+   * Entity Node for testing datetime token support.
+   *
+   * @var \Drupal\node\Entity\Node
+   */
+  protected $node;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp($modules = []) {
+    parent::setUp();
+
+    $this->profile = 'testing';
+
+    // Create the article content type with a datetime field.
+    $node_type = NodeType::create([
+      'type' => 'article',
+    ]);
+    $node_type->save();
+
+    $field_date_storage = FieldStorageConfig::create(array(
+      'field_name' => 'field_date',
+      'type' => 'datetime',
+      'entity_type' => 'node',
+      'settings' => array('datetime_type' => DateTimeItem::DATETIME_TYPE_DATETIME),
+    ));
+    $field_date_storage->save();
+
+    $field_date = FieldConfig::create([
+      'field_name' => 'field_date',
+      'entity_type' => 'node',
+      'bundle' => 'article',
+      'label' => 'Test date field',
+    ]);
+    $field_date->save();
+
+    $field_date_range_storage = FieldStorageConfig::create(array(
+      'field_name' => 'field_date_range',
+      'type' => 'daterange',
+      'entity_type' => 'node',
+      'settings' => array('datetime_type' => DateRangeItem::DATETIME_TYPE_DATETIME),
+    ));
+
+    $field_date_range_storage->save();
+
+    $field_date_range = FieldConfig::create([
+      'field_name' => 'field_date_range',
+      'entity_type' => 'node',
+      'bundle' => 'article',
+      'label' => 'Test daterange field',
+    ]);
+    $field_date_range->save();
+
+    $this->node = Node::create([
+      'title' => 'Test node',
+      'type' => 'article',
+    ]);
+    $this->node->save();
+  }
+
+  /**
+   * Test that tokens are correctly provided and replaced for the datetime fields.
+   */
+  public function testDatetimeFieldTokens() {
+
+    $data = [
+      ['value' => '1925-09-28T00:00:00',
+        'tokens' => [
+          'field_date:date' => strtotime('1925-09-28T00:00:00+00:00'),
+          'field_date:date:html_month' => '1925-09',
+          'field_date:date:custom:Y' => '1925',
+        ]
+      ],
+      ['value' => '',
+        'tokens' => [
+          'field_date:date:custom:Y' => NULL
+        ]
+      ],
+    ];
+
+    $node = $this->node;
+
+    foreach($data as $item) {
+      $node->field_date->value = $item['value'];
+      $node->save();
+      $this->assertTokens('node', ['node' => $node], $item['tokens']);
+    }
+  }
+
+  /**
+   * Test that tokens are correctly provided and replaced for the daterange fields.
+   */
+  public function testDatetimeRangeFieldTokens() {
+
+    $data = [
+      ['value' => '1999-09-09T00:00:00',
+       'end_value' => '2000-10-10T00:00:00',
+        'tokens' => [
+          'field_date_range:start_date:custom:Y' => '1999',
+          'field_date_range:end_date:custom:Y' => '2000',
+          'field_date_range:start_date' => strtotime('1999-09-09T00:00:00+00:00'),
+          'field_date_range:start_date:html_month' => '1999-09',
+        ]
+      ],
+    ];
+
+    $node = $this->node;
+
+    foreach($data as $item) {
+      $node->field_date_range->value = $item['value'];
+      $node->field_date_range->end_value = $item['end_value'];
+      $node->save();
+      $this->assertTokens('node', ['node' => $node], $item['tokens']);
+    }
+  }
+}
