function format_date

Same name and namespace in other branches
  1. 8.9.x core/includes/ \format_date()

Formats a date, using a date type or a custom date format string.


$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 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/
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/
Implements hook_tokens().
DateTimeFunctionalTest::testDateFormatConfiguration in modules/system/system.test
Test date format configuration.

... See full list


includes/, line 2081


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');
        case 'long':
            $format = variable_get('date_format_long', 'l, F j, Y - H:i');
        case 'custom':
            // No change to format.
        case 'medium':
            // 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');
    // 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(
    ), 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);

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.