function format_date in Drupal 7
Same name and namespace in other branches
- 8 core/includes/common.inc \format_date()
- 4 includes/common.inc \format_date()
- 5 includes/common.inc \format_date()
- 6 includes/common.inc \format_date()
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.
Related topics
56 calls to format_date()
- CommentPreviewTest::testCommentEditPreviewSave in modules/
comment/ comment.test - Test comment edit, preview, and save.
- comment_admin_overview in modules/
comment/ comment.admin.inc - Form builder for the comment overview administration form.
- comment_form in modules/
comment/ comment.module - Generate the basic commenting form, for appending to a node or display on a separate page.
- comment_tokens in modules/
comment/ comment.tokens.inc - Implements hook_tokens().
- DateTimeFunctionalTest::testDateFormatConfiguration in modules/
system/ system.test - Test date format configuration.
File
- includes/
common.inc, line 2037 - Common functions that many Drupal modules will need to reference.
Code
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_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.
$format = preg_replace(array(
'/\\\\\\\\/',
'/(?<!\\\\)([AaeDlMTF])/',
), array(
"",
"",
), $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);
}