diff --git a/facetapi.callbacks.inc b/facetapi.callbacks.inc
index ff1b625..b324842 100644
--- a/facetapi.callbacks.inc
+++ b/facetapi.callbacks.inc
@@ -67,13 +67,16 @@ function facetapi_map_language(array $values) {
  * @return
  *   An array mapping the ranges to nice display dates.
  */
-function facetapi_map_date(array $values) {
+function facetapi_map_date(array $values, array $options) {
+  if (empty($options['format callback'])) {
+    $options['format callback'] = 'facetapi_format_timestamp';
+  }
   $map = array();
   foreach ($values as $value) {
     $range = explode(' TO ', trim($value, '{[]}'));
-    if (2 == count($range)) {
+    if (isset($range[1])) {
       $gap = facetapi_get_date_gap($range[0], $range[1]);
-      $map[$value] = facetapi_format_date($range[0], $gap);
+      $map[$value] = facetapi_format_date($range[0], $gap, $options['format callback']);
     }
   }
   return $map;
diff --git a/facetapi.date.inc b/facetapi.date.inc
index 673496e..28d6e29 100644
--- a/facetapi.date.inc
+++ b/facetapi.date.inc
@@ -199,13 +199,17 @@ function facetapi_format_timestamp($timestamp, $gap = FACETAPI_DATE_YEAR) {
  * @param $gap
  *   A string containing the gap, see FACETAPI_DATE_* constants for valid
  *   values, defaults to YEAR.
+ * @param $callback
+ *   The formatting callback, defaults to "facetapi_format_timestamp".
  *
  * @return
  *   A gap-appropriate display date used in the facet link.
+ *
+ * @see facetapi_format_timestamp()
  */
-function facetapi_format_date($date, $gap = FACETAPI_DATE_YEAR) {
+function facetapi_format_date($date, $gap = FACETAPI_DATE_YEAR, $callback = 'facetapi_format_timestamp') {
   $timestamp = strtotime($date);
-  return facetapi_format_timestamp($timestamp, $gap);
+  return $callback($timestamp, $gap);
 }
 
 /**
