| 5 common.inc | format_date($timestamp, $type = 'medium', $format = '', $timezone = NULL) |
| 6 common.inc | format_date($timestamp, $type = 'medium', $format = '', $timezone = NULL, $langcode = NULL) |
| 7 common.inc | format_date($timestamp, $type = 'medium', $format = '', $timezone = NULL, $langcode = NULL) |
| 8 common.inc | format_date($timestamp, $type = 'medium', $format = '', $timezone = NULL, $langcode = NULL) |
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/en/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
File
- includes/
common.inc, line 1885 - Common functions that many Drupal modules will need to reference.
Code
<?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_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("\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
Comments
Options are actually small, medium, large
If you can't get this function to work, try using small, medium, and large for the date formats. I don't know if this is an error in documentation or because I'm running the date module.
for Drupal 6.x
It looks like the documentation on this page applies to the 7.x function which takes short, medium and long. The 6.x function takes small, medium and large, as aiquandol points out.
Maybe the 6 and 7 documentation should be separated?
The documentation is separate
D6 is: http://api.drupal.org/api/drupal/includes--common.inc/function/format_da... and D7 is: http://api.drupal.org/api/drupal/includes--common.inc/function/format_da...