diff --git a/handlers/views_handler_field_date.inc b/handlers/views_handler_field_date.inc
index 8517f0b..f2c6371 100644
--- a/handlers/views_handler_field_date.inc
+++ b/handlers/views_handler_field_date.inc
@@ -16,6 +16,8 @@ class views_handler_field_date extends views_handler_field {
 
     $options['date_format'] = array('default' => 'small');
     $options['custom_date_format'] = array('default' => '');
+    $options['second_date_format_custom'] = array('default' => '');
+    $options['second_date_format'] = array('default' => 'small');
     $options['timezone'] = array('default' => '');
 
     return $options;
@@ -36,6 +38,7 @@ class views_handler_field_date extends views_handler_field {
         'custom' => t('Custom'),
         'raw time ago' => t('Time ago'),
         'time ago' => t('Time ago (with "ago" appended)'),
+        'today time ago' => t('Time ago (with "ago" appended) for today\'s date, but not for other dates'),
         'raw time hence' => t('Time hence'),
         'time hence' => t('Time hence (with "hence" appended)'),
         'raw time span' => t('Time span (future dates have "-" prepended)'),
@@ -49,8 +52,39 @@ class views_handler_field_date extends views_handler_field {
       '#title' => t('Custom date format'),
       '#description' => t('If "Custom", see the <a href="@url" target="_blank">PHP manual</a> for date formats. Otherwise, enter the number of different time units to display, which defaults to 2.', array('@url' => 'http://php.net/manual/function.date.php')),
       '#default_value' => isset($this->options['custom_date_format']) ? $this->options['custom_date_format'] : '',
-      '#dependency' => array('edit-options-date-format' => array('custom', 'raw time ago', 'time ago', 'raw time hence', 'time hence', 'raw time span', 'time span', 'raw time span', 'inverse time span', 'time span')),
+      '#dependency' => array('edit-options-date-format' => array('custom', 'raw time ago', 'time ago', 'today time ago', 'raw time hence', 'time hence', 'raw time span', 'time span', 'raw time span', 'inverse time span', 'time span')),
     );
+    $form['second_date_format'] = array(
+     '#type' => 'select',
+     '#title' => t('Second date format'),
+     '#options' => $date_formats + array(
+       'custom' => t('Custom'),
+     ),
+     '#description' => t('The date format which will be used for rendering dates other than today.'),
+     '#default_value' => isset($this->options['second_date_format']) ? $this->options['second_date_format'] : 'small',
+     '#dependency' => array('edit-options-date-format' => array('today time ago')),
+   );
+   $form['second_date_format_custom'] = array(
+     '#type' => 'textfield',
+     '#title' => t('Custom date format of second date'),
+     '#description' => t('If "Custom" is selected in "Second date format", see the <a href="@url" target="_blank">PHP manual</a> for date formats. Otherwise, enter the number of different time units to display, which defaults to 2.', array('@url' => 'http://php.net/manual/function.date.php')),
+     '#default_value' => isset($this->options['second_date_format_custom']) ? $this->options['second_date_format_custom'] : '',
+     // We have to use states instead of ctools dependency because dependency
+     // doesn't handle multiple conditions.
+     '#states' => array(
+       'visible' => array(
+         '#edit-options-date-format' => array('value' => 'today time ago'),
+         '#edit-options-second-date-format' => array('value' => 'custom'),
+       ),
+     ),
+     // We have to use ctools dependency too because states doesn't add the
+     // correct left margin to the element's wrapper.
+     '#dependency' => array(
+       // This condition is handled by form API's states.
+//        'edit-options-date-format' => array('today time ago'),
+       'edit-options-second-date-format' => array('custom'),
+     ),
+   );
     $form['timezone'] = array(
       '#type' => 'select',
       '#title' => t('Timezone'),
@@ -66,7 +100,7 @@ class views_handler_field_date extends views_handler_field {
   function render($values) {
     $value = $this->get_value($values);
     $format = $this->options['date_format'];
-    if (in_array($format, array('custom', 'raw time ago', 'time ago', 'raw time hence', 'time hence', 'raw time span', 'time span', 'raw time span', 'inverse time span', 'time span'))) {
+    if (in_array($format, array('custom', 'raw time ago', 'time ago', 'today time ago', 'raw time hence', 'time hence', 'raw time span', 'time span', 'raw time span', 'inverse time span', 'time span'))) {
       $custom_format = $this->options['custom_date_format'];
     }
 
@@ -78,6 +112,21 @@ class views_handler_field_date extends views_handler_field {
           return format_interval($time_diff, is_numeric($custom_format) ? $custom_format : 2);
         case 'time ago':
           return t('%time ago', array('%time' => format_interval($time_diff, is_numeric($custom_format) ? $custom_format : 2)));
+        case 'today time ago':
+          $second_format = $this->options['second_date_format'];
+          $second_custom_format = $this->options['second_date_format_custom'];
+          if (format_date(REQUEST_TIME, 'custom', 'Y-m-d', $timezone) == format_date($value, 'custom', 'Y-m-d', $timezone)) {
+            return t('%time ago', array('%time' => format_interval($time_diff, is_numeric($custom_format) ? $custom_format : 2)));
+          }
+          elseif ($second_format == 'custom') {
+            if ($second_custom_format == 'r') {
+              return format_date($value, $second_format, $second_custom_format, $timezone, 'en');
+            }
+            return format_date($value, $second_format, $second_custom_format, $timezone);
+          }
+          else {
+            return format_date($value, $this->options['second_date_format'], '', $timezone);
+          }
         case 'raw time hence':
           return format_interval(-$time_diff, is_numeric($custom_format) ? $custom_format : 2);
         case 'time hence':
diff --git a/tests/handlers/views_handler_field_date.test b/tests/handlers/views_handler_field_date.test
index 028b687..85df5a2 100644
--- a/tests/handlers/views_handler_field_date.test
+++ b/tests/handlers/views_handler_field_date.test
@@ -34,6 +34,8 @@ class ViewsHandlerFieldDateTest extends ViewsSqlTest {
         'relationship' => 'none',
         // c is iso 8601 date format @see http://php.net/manual/en/function.date.php
         'custom_date_format' => 'c',
+        'second_date_format' => 'custom',
+        'second_date_format_custom' => 'c',
       ),
     ));
     $time = gmmktime(0, 0, 0, 1, 1, 2000);
@@ -51,6 +53,8 @@ class ViewsHandlerFieldDateTest extends ViewsSqlTest {
         'medium' => format_date($time, 'medium', '', $timezone),
         'large' => format_date($time, 'large', '', $timezone),
         'custom' => format_date($time, 'custom', 'c', $timezone),
+        'today time ago custom' => format_date($time, 'custom', 'c', $timezone),
+        'today time ago' => t('%time ago', array('%time' => format_interval(120, 2))),
       );
       $this->assertRenderedDatesEqual($view, $dates, $timezone);
     }
@@ -67,6 +71,17 @@ class ViewsHandlerFieldDateTest extends ViewsSqlTest {
 
   protected function assertRenderedDatesEqual($view, $map, $timezone = NULL) {
     foreach ($map as $date_format => $expected_result) {
+      $check_result_number = 0;
+
+      // If it's "today time ago" format we have to check the 6th element.
+      if ($date_format == 'today time ago') {
+        $check_result_number = 5;
+      }
+
+      // Correct the date format.
+      if ($date_format == 'today time ago custom') {
+        $date_format = 'today time ago';
+      }
       $view->field['created']->options['date_format'] = $date_format;
       $t_args = array(
         '%value' => $expected_result,
@@ -80,7 +95,7 @@ class ViewsHandlerFieldDateTest extends ViewsSqlTest {
       else {
         $message = t('Value %value in %format format matches.', $t_args);
       }
-      $actual_result = $view->field['created']->advanced_render($view->result[0]);
+      $actual_result = $view->field['created']->advanced_render($view->result[$check_result_number]);
       $this->assertEqual($expected_result, $actual_result, $message);
     }
   }
diff --git a/tests/views_query.test b/tests/views_query.test
index 735df0e..95a2ee7 100644
--- a/tests/views_query.test
+++ b/tests/views_query.test
@@ -354,6 +354,12 @@ abstract class ViewsSqlTest extends ViewsTestCase {
         'job' => 'Speaker',
         'created' => gmmktime(6, 30, 10, 1, 1, 2000),
       ),
+      array(
+        'name' => 'David',
+        'age' => 31,
+        'job' => 'Speaker',
+        'created' => REQUEST_TIME - 120,
+      ),
     );
   }
 
