diff --git a/elements.module b/elements.module
index ed66a30..fb59d27 100644
--- a/elements.module
+++ b/elements.module
@@ -52,6 +52,50 @@ function elements_element_info() {
     '#theme_wrappers' => array('form_element'),
   );
 
+  // Suite of date picker elements
+  $types['datefield'] = array(
+    '#input' => TRUE,
+    '#process' => array('ajax_process_form'),
+    '#autocomplete_path' => FALSE,
+    '#theme' => 'datefield',
+    '#theme_wrappers' => array('form_element'),
+  );
+  $types['monthfield'] = array(
+    '#input' => TRUE,
+    '#process' => array('ajax_process_form'),
+    '#autocomplete_path' => FALSE,
+    '#theme' => 'monthfield',
+    '#theme_wrappers' => array('form_element'),
+  );
+  $types['weekfield'] = array(
+    '#input' => TRUE,
+    '#process' => array('ajax_process_form'),
+    '#autocomplete_path' => FALSE,
+    '#theme' => 'weekfield',
+    '#theme_wrappers' => array('form_element'),
+  );
+  $types['timefield'] = array(
+    '#input' => TRUE,
+    '#process' => array('ajax_process_form'),
+    '#autocomplete_path' => FALSE,
+    '#theme' => 'timefield',
+    '#theme_wrappers' => array('form_element'),
+  );
+  $types['datetimefield'] = array(
+    '#input' => TRUE,
+    '#process' => array('ajax_process_form'),
+    '#autocomplete_path' => FALSE,
+    '#theme' => 'datetimefield',
+    '#theme_wrappers' => array('form_element'),
+  );
+  $types['datetimelocalfield'] = array(
+    '#input' => TRUE,
+    '#process' => array('ajax_process_form'),
+    '#autocomplete_path' => FALSE,
+    '#theme' => 'datetimelocalfield',
+    '#theme_wrappers' => array('form_element'),
+  );
+
   return $types;
 }
 
@@ -105,6 +149,36 @@ function elements_theme() {
       'render element' => 'element',
       'file' => 'elements.theme.inc',
     ),
+    'datefield' => array(
+      'arguments' => array('element' => NULL),
+      'render element' => 'element',
+      'file' => 'elements.theme.inc',
+    ),
+    'monthfield' => array(
+      'arguments' => array('element' => NULL),
+      'render element' => 'element',
+      'file' => 'elements.theme.inc',
+    ),
+    'weekfield' => array(
+      'arguments' => array('element' => NULL),
+      'render element' => 'element',
+      'file' => 'elements.theme.inc',
+    ),
+    'timefield' => array(
+      'arguments' => array('element' => NULL),
+      'render element' => 'element',
+      'file' => 'elements.theme.inc',
+    ),
+    'datetimefield' => array(
+      'arguments' => array('element' => NULL),
+      'render element' => 'element',
+      'file' => 'elements.theme.inc',
+    ),
+    'datetimelocalfield' => array(
+      'arguments' => array('element' => NULL),
+      'render element' => 'element',
+      'file' => 'elements.theme.inc',
+    ),
   );
 }
 
diff --git a/elements.theme.inc b/elements.theme.inc
index 12b1706..50e9081 100644
--- a/elements.theme.inc
+++ b/elements.theme.inc
@@ -142,3 +142,135 @@ function theme_rangefield($variables) {
 
   return $output;
 }
+
+/**
+ * Returns HTML for a datefield form element.
+ *
+ * @param $variables
+ *   An associative array containing:
+ *   - element: An associative array containing the properties of the element.
+ *     Properties used: #title, #value, #description, #size, #maxlength,
+ *     #placeholder, #required, #attributes.
+ *
+ * @ingroup themeable
+ */
+function theme_datefield($variables) {
+  $element = $variables['element'];
+  $element['#attributes']['type'] = 'date';
+  element_set_attributes($element, array('id', 'name', 'value', 'size', 'maxlength', 'placeholder'));
+  _form_set_class($element, array('form-text', 'form-date'));
+
+  $output = '<input' . drupal_attributes($element['#attributes']) . ' />';
+
+  return $output;
+}
+
+/**
+ * Returns HTML for a monthfield form element.
+ *
+ * @param $variables
+ *   An associative array containing:
+ *   - element: An associative array containing the properties of the element.
+ *     Properties used: #title, #value, #description, #size, #maxlength,
+ *     #placeholder, #required, #attributes.
+ *
+ * @ingroup themeable
+ */
+function theme_monthfield($variables) {
+  $element = $variables['element'];
+  $element['#attributes']['type'] = 'month';
+  element_set_attributes($element, array('id', 'name', 'value', 'size', 'maxlength', 'placeholder'));
+  _form_set_class($element, array('form-text', 'form-month'));
+
+  $output = '<input' . drupal_attributes($element['#attributes']) . ' />';
+
+  return $output;
+}
+
+/**
+ * Returns HTML for a weekfield form element.
+ *
+ * @param $variables
+ *   An associative array containing:
+ *   - element: An associative array containing the properties of the element.
+ *     Properties used: #title, #value, #description, #size, #maxlength,
+ *     #placeholder, #required, #attributes.
+ *
+ * @ingroup themeable
+ */
+function theme_weekfield($variables) {
+  $element = $variables['element'];
+  $element['#attributes']['type'] = 'week';
+  element_set_attributes($element, array('id', 'name', 'value', 'size', 'maxlength', 'placeholder'));
+  _form_set_class($element, array('form-text', 'form-week'));
+
+  $output = '<input' . drupal_attributes($element['#attributes']) . ' />';
+
+  return $output;
+}
+
+/**
+ * Returns HTML for a timefield form element.
+ *
+ * @param $variables
+ *   An associative array containing:
+ *   - element: An associative array containing the properties of the element.
+ *     Properties used: #title, #value, #description, #size, #maxlength,
+ *     #placeholder, #required, #attributes.
+ *
+ * @ingroup themeable
+ */
+function theme_timefield($variables) {
+  $element = $variables['element'];
+  $element['#attributes']['type'] = 'time';
+  element_set_attributes($element, array('id', 'name', 'value', 'size', 'maxlength', 'placeholder'));
+  _form_set_class($element, array('form-text', 'form-time'));
+
+  $output = '<input' . drupal_attributes($element['#attributes']) . ' />';
+
+  return $output;
+}
+
+/**
+ * Returns HTML for a datetimefield form element.
+ *
+ * @param $variables
+ *   An associative array containing:
+ *   - element: An associative array containing the properties of the element.
+ *     Properties used: #title, #value, #description, #size, #maxlength,
+ *     #placeholder, #required, #attributes.
+ *
+ * @ingroup themeable
+ */
+function theme_datetimefield($variables) {
+  $element = $variables['element'];
+  $element['#attributes']['type'] = 'datetime';
+  element_set_attributes($element, array('id', 'name', 'value', 'size', 'maxlength', 'placeholder'));
+  _form_set_class($element, array('form-text', 'form-datetime'));
+
+  $output = '<input' . drupal_attributes($element['#attributes']) . ' />';
+
+  return $output;
+}
+
+/**
+ * Returns HTML for a datetimelocalfield form element.
+ *
+ * @param $variables
+ *   An associative array containing:
+ *   - element: An associative array containing the properties of the element.
+ *     Properties used: #title, #value, #description, #size, #maxlength,
+ *     #placeholder, #required, #attributes.
+ *
+ * @ingroup themeable
+ */
+function theme_datetimelocalfield($variables) {
+  $element = $variables['element'];
+  $element['#attributes']['type'] = 'datetime-local';
+  element_set_attributes($element, array('id', 'name', 'value', 'size', 'maxlength', 'placeholder'));
+  _form_set_class($element, array('form-text', 'form-datetimelocal'));
+
+  $output = '<input' . drupal_attributes($element['#attributes']) . ' />';
+
+  return $output;
+}
\ No newline at end of file
