You are here

function calendar_systems_format_date in Calendar Systems 7

Same name and namespace in other branches
  1. 8 calendar_systems.module \calendar_systems_format_date()
  2. 5 calendar_systems.module \calendar_systems_format_date()
  3. 6.3 calendar_systems.module \calendar_systems_format_date()
  4. 6 calendar_systems.module \calendar_systems_format_date()
  5. 6.2 calendar_systems.module \calendar_systems_format_date()
  6. 7.3 calendar_systems.module \calendar_systems_format_date()
  7. 7.2 calendar_systems.module \calendar_systems_format_date()

Simulating core format_date in case the patch wasn't applied Formats a date, using a date type or a custom date format string.

Parameters

$timestamp: A UNIX timestamp to format.

$type: (optional) The format to use, one of:

  • 'short', 'medium', or 'long' (the corresponding built-in date formats).
  • The name of a date type defined by a module in hook_date_format_types(), if it's been assigned a format.
  • The machine name of an administrator-defined date format.
  • 'custom', to use $format.

Defaults to 'medium'.

$format: (optional) If $type is 'custom', a PHP date format string suitable for input to date(). Use a backslash to escape ordinary text, so it does not get interpreted as date format characters.

$timezone: (optional) Time zone identifier, as described at http://php.net/manual/timezones.php Defaults to the time zone used to display the page.

$langcode: (optional) Language code to translate to. Defaults to the language used to display the page.

Return value

A translated date string in the requested format.

5 calls to calendar_systems_format_date()
calendar_systems_add_js_date_picker in ./calendar_systems.module
Add javascript date picker for a field or set of fields
calendar_systems_attach_js_date_picker in ./calendar_systems.module
calendar_systems_date_popup_process_alter in ./calendar_systems.module
Supporing date module's date_popup element hook_date_popup_process_alter
calendar_systems_date_text_process_alter in ./calendar_systems.module
Supporing date module's date_text element hook_date_text_process_alter
calendar_systems_preprocess_content_field in ./calendar_systems.module
For basic integration with views

File

./calendar_systems.module, line 147
Contains Calendar Systems hook implementations and helpers.

Code

function calendar_systems_format_date($timestamp, $type = 'medium', $format = '', $timezone = NULL, $langcode = NULL) {
  if (_calendar_systems_is_patch_applied()) {
    return format_date($timestamp, $type, $format, $timezone, $langcode);
  }

  // Use the advanced drupal_static() pattern, since this is called very often.
  static $drupal_static_fast;
  if (!isset($drupal_static_fast)) {
    $drupal_static_fast['timezones'] =& drupal_static(__FUNCTION__);
  }
  $timezones =& $drupal_static_fast['timezones'];
  if (!isset($timezone)) {
    $timezone = date_default_timezone_get();
  }

  // Store DateTimeZone objects in an array rather than repeatedly
  // constructing identical objects over the life of a request.
  if (!isset($timezones[$timezone])) {
    $timezones[$timezone] = timezone_open($timezone);
  }

  // Use the default langcode if none is set.
  global $language;
  if (empty($langcode)) {
    $langcode = isset($language->language) ? $language->language : 'en';
  }
  switch ($type) {
    case 'short':
      $format = variable_get('date_format_short', 'm/d/Y - H:i');
      break;
    case 'long':
      $format = variable_get('date_format_long', 'l, F j, Y - H:i');
      break;
    case 'custom':

      // No change to format.
      break;
    case 'medium':
    default:

      // Retrieve the format of the custom $type passed.
      if ($type != 'medium') {
        $format = variable_get('date_format_' . $type, '');
      }

      // Fall back to 'medium'.
      if ($format === '') {
        $format = variable_get('date_format_medium', 'D, m/d/Y - H:i');
      }
      break;
  }

  // Create a DateTime object from the timestamp.
  $date_time = date_create('@' . $timestamp);

  // Set the time zone for the DateTime object.
  date_timezone_set($date_time, $timezones[$timezone]);

  // Encode markers that should be translated. 'A' becomes '\xEF\AA\xFF'.
  // xEF and xFF are invalid UTF-8 sequences, and we assume they are not in the
  // input string.
  // Paired backslashes are isolated to prevent errors in read-ahead evaluation.
  // The read-ahead expression ensures that A matches, but not \A.
  $original_format = $format;
  $format = preg_replace(array(
    '/\\\\\\\\/',
    '/(?<!\\\\)([AaeDlMTF])/',
  ), array(
    "",
    "",
  ), $format);

  // Call date_format().
  $formatted_date = date_format($date_time, $format);

  // Pass the langcode to _format_date_callback().
  _format_date_callback(NULL, $langcode);

  // Translate the marked sequences.
  $formatted_date = preg_replace_callback('/\\xEF([AaeDlMTF]?)(.*?)\\xFF/', '_format_date_callback', $formatted_date);

  // Allow modules to alter the result.
  $context = array(
    'date_time' => $date_time,
    'timestamp' => $timestamp,
    'type' => $type,
    'format' => $original_format,
    'timezone' => $timezone,
    'langcode' => $langcode,
  );
  drupal_alter('format_date', $formatted_date, $context);
  return filter_xss_admin($formatted_date);
}