function views_handler_field_date::render

Same name in other branches
  1. 6.x-3.x handlers/views_handler_field_date.inc \views_handler_field_date::render()

Overrides views_handler_field::render

1 call to views_handler_field_date::render()
views_handler_field_last_comment_timestamp::render in modules/comment/views_handler_field_last_comment_timestamp.inc
Render the field.
2 methods override views_handler_field_date::render()
views_handler_field_last_comment_timestamp::render in modules/comment/views_handler_field_last_comment_timestamp.inc
Render the field.
views_handler_field_profile_date::render in modules/profile/views_handler_field_profile_date.inc
Display a profile field of type 'date'.

File

handlers/views_handler_field_date.inc, line 144

Class

views_handler_field_date
A handler to provide proper displays for dates.

Code

public function render($values) {
    $value = $this->get_value($values);
    // If the value isn't numeric, assume it's an SQL DATETIME.
    if (!empty($value) && !is_numeric($value)) {
        $value = strtotime($value);
    }
    if ($value) {
        $format = $this->options['date_format'];
        // The custom format can be either a number or a string, depending upon
        // what format is being used.
        $custom_format = NULL;
        if (in_array($format, $this->supported_date_types())) {
            $custom_format = $this->options['custom_date_format'];
        }
        $timezone = !empty($this->options['timezone']) ? $this->options['timezone'] : NULL;
        // Will be positive for a datetime in the past (ago), and negative for a
        // datetime in the future (hence).
        $time_diff = REQUEST_TIME - $value;
        switch ($format) {
            case 'raw time ago':
                return format_interval($time_diff, is_numeric($custom_format) ? $custom_format : 2);
            case 'time ago':
                $t_args = array(
                    '%time' => format_interval($time_diff, is_numeric($custom_format) ? $custom_format : 2),
                );
                return t('%time ago', $t_args);
            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':
                return t('%time hence', array(
                    '%time' => format_interval(-$time_diff, is_numeric($custom_format) ? $custom_format : 2),
                ));
            case 'raw time span':
                return ($time_diff < 0 ? '-' : '') . format_interval(abs($time_diff), is_numeric($custom_format) ? $custom_format : 2);
            case 'inverse time span':
                return ($time_diff > 0 ? '-' : '') . format_interval(abs($time_diff), is_numeric($custom_format) ? $custom_format : 2);
            case 'time span':
                return t($time_diff < 0 ? '%time hence' : '%time ago', array(
                    '%time' => format_interval(abs($time_diff), is_numeric($custom_format) ? $custom_format : 2),
                ));
            case 'custom':
                if ($custom_format == 'r') {
                    return format_date($value, $format, $custom_format, $timezone, 'en');
                }
                return format_date($value, $format, t($custom_format), $timezone);
            default:
                // The custom format is not used in this scenario.
                return format_date($value, $format, '', $timezone);
        }
    }
}