diff --git a/date.module b/date.module
index 16e19e2..f6bcd76 100644
--- a/date.module
+++ b/date.module
@@ -558,6 +558,8 @@ function date_entity_metadata_property_info_alter(&$info, $entity_type, $field,
       // The getter and setter callbacks for 'value' and 'value2'
       // will not provide the field name as $name, we'll add it to $info.
       'field_name' => $field['field_name'],
+      // Alert Microdata module that this value can be exposed in microdata.
+      'microdata' => TRUE,
     );
     $property['property info']['duration'] = array(
       'type' => 'duration',
diff --git a/date.theme b/date.theme
index 7ee2a9b..0738cfa 100644
--- a/date.theme
+++ b/date.theme
@@ -184,6 +184,8 @@ function theme_date_display_combination($variables) {
       'rdf_mapping' => $rdf_mapping,
       'add_rdf' => $add_rdf,
       'dates' => $dates,
+      'microdata' => $microdata,
+      'add_microdata' => $add_microdata,
     ));
     $replaced = str_replace($time1, $time, $date1);
     $output .= theme('date_display_single', array(
@@ -205,6 +207,8 @@ function theme_date_display_combination($variables) {
       'rdf_mapping' => $rdf_mapping,
       'add_rdf' => $add_rdf,
       'dates' => $dates,
+      'microdata' => $microdata,
+      'add_microdata' => $add_microdata,
     ));
   }
 
@@ -282,6 +286,14 @@ function template_preprocess_date_display_range(&$variables) {
       $variables['attributes_end']['property'][$delta] = str_replace('start', 'end', $property);
     }
   }
+
+  if (isset($variables['add_microdata']) && !empty($variables['microdata'])) {
+    foreach($variables['microdata'] as $key) {
+      if(!empty($variables['microdata'][$key]['#attributes']['itemprop'])) {
+        $variables['microdata'][$key]['#attributes']['content'] = $variables['dates'][$key]['formatted_iso'];
+      }
+    }
+  }
 }
 
 /**
@@ -294,11 +306,23 @@ function theme_date_display_range($variables) {
   $attributes_start = $variables['attributes_start'];
   $attributes_end = $variables['attributes_end'];
 
+  // If microdata attributes for the start date property have been passed in,
+  // add the microdata in a meta tag.
+  $microdata_extra = '';
+  if (isset($variables['add_microdata']) && !empty($variables['microdata'])) {
+    $microdata = $variables['microdata'];
+    foreach(element_children($microdata) as $key) {
+      if(!empty($microdata[$key]['#attributes'])) {
+        $microdata_extra.= '<meta' . drupal_attributes($microdata[$key]['#attributes']) . '/>';
+      }
+    }
+  }
+
   // Wrap the result with the attributes.
   return t('!start-date to !end-date', array(
     '!start-date' => '<span class="date-display-start"' . drupal_attributes($attributes_start) . '>' . $date1 . '</span>',
     '!end-date' => '<span class="date-display-end"' . drupal_attributes($attributes_end) . '>' . $date2 . $timezone . '</span>',
-  ));
+  )) . $microdata_extra;
 }
 
 /**
