You are here

function date_range_years in Date 7

Same name and namespace in other branches
  1. 6.2 date_api.module \date_range_years()
  2. 7.3 date_api/date_api.module \date_range_years()
  3. 7.2 date_api/date_api.module \date_range_years()

Split a string like -3:+3 or 2001:2010 into an array of min and max years.

Center the range around the current year, if any, but expand it far enough so it will pick up the year value in the field in case the value in the field is outside the initial range.

5 calls to date_range_years()
date_parts_element in date_api/date_api_elements.inc
Create form elements for one or more date parts.
date_popup_process_date in date_popup/date_popup.module
Process the date portion of the element.
date_views_argument_handler::init in date_views/includes/date_views_argument_handler.inc
Get granularity and use it to create the formula and a format for the results.
date_views_filter_handler::date_filter in date_views/includes/date_views_filter_handler.inc
date_views_filter_handler::init in date_views/includes/date_views_filter_handler.inc
Provide some extra help to get the operator/value easier to use.

File

date_api/date_api.module, line 1847
This module will make the date API available to other modules. Designed to provide a light but flexible assortment of functions and constants, with more functionality in additional files that are not loaded unless other modules specifically include them.

Code

function date_range_years($string, $date = NULL) {
  $this_year = date_format(date_now(), 'Y');
  list($min_year, $max_year) = explode(':', $string);

  // Valid patterns would be -5:+5, 0:+1, 2008:2010.
  $plus_pattern = '@[\\+|\\-][0-9]{1,4}@';
  $year_pattern = '@[0-9]{4}@';
  if (!preg_match($year_pattern, $min_year, $matches)) {
    if (preg_match($plus_pattern, $min_year, $matches)) {
      $min_year = $this_year + $matches[0];
    }
    else {
      $min_year = $this_year;
    }
  }
  if (!preg_match($year_pattern, $max_year, $matches)) {
    if (preg_match($plus_pattern, $max_year, $matches)) {
      $max_year = $this_year + $matches[0];
    }
    else {
      $max_year = $this_year;
    }
  }

  // We expect the $min year to be less than the $max year.
  // Some custom values for -99:+99 might not obey that.
  if ($min_year > $max_year) {
    $temp = $max_year;
    $max_year = $min_year;
    $min_year = $temp;
  }

  // If there is a current value, stretch the range to include it.
  $value_year = is_object($date) ? $date
    ->format('Y') : '';
  if (!empty($value_year)) {
    $min_year = min($value_year, $min_year);
    $max_year = max($value_year, $max_year);
  }
  return array(
    $min_year,
    $max_year,
  );
}