format_date
- Versions
- 4.6 – 5
format_date($timestamp, $type = 'medium', $format = '', $timezone = NULL)- 6 – 7
format_date($timestamp, $type = 'medium', $format = '', $timezone = NULL, $langcode = NULL)
Format a date with the given configured format or a custom format string.
Drupal allows administrators to select formatting strings for 'short', 'medium' and 'long' date formats. This function can handle these formats, as well as any custom format.
Parameters
$timestamp The exact date to format, as a UNIX timestamp.
$type The format to use. Can be "short", "medium" or "long" for the preconfigured date formats. If "custom" is specified, then $format is required as well.
$format A PHP date format string as required by date(). A backslash should be used before a character to avoid interpreting the character as part of a date format.
$timezone Time zone identifier; if omitted, the user's time zone is used.
$langcode Optional language code to translate to a language other than what is used to display the page.
Return value
A translated date string in the requested format.
Related topics
Code
includes/common.inc, line 2276
<?php
function format_date($timestamp, $type = 'medium', $format = '', $timezone = NULL, $langcode = NULL) {
// Use the advanced drupal_static() pattern, since this is called very often.
static $drupal_static = array();
isset($drupal_static[__FUNCTION__]) || ($drupal_static[__FUNCTION__] = &drupal_static(__FUNCTION__));
$timezones = &$drupal_static[__FUNCTION__];
if (!isset($timezone)) {
global $user;
if (variable_get('configurable_timezones', 1) && $user->uid && $user->timezone) {
$timezone = $user->timezone;
}
else {
$timezone = variable_get('date_default_timezone', 'UTC');
}
}
// Store DateTimeZone objects in an array rather than repeatedly
// contructing 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:
$format = variable_get('date_format_medium', 'D, m/d/Y - H:i');
}
// 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.
$format = preg_replace(array('/\\\\\\\\/', '/(?<!\\\\)([AaeDlMTF])/'), array("\xEF\\\\\\\\\xFF", "\xEF\\\\\$1\$1\xFF"), $format);
// Call date_format().
$format = date_format($date_time, $format);
// Pass the langcode to _format_date_callback().
_format_date_callback(NULL, $langcode);
// Translate the marked sequences.
return preg_replace_callback('/\xEF([AaeDlMTF]?)(.*?)\xFF/', '_format_date_callback', $format);
}
?>Login or register to post comments 