PHP: How to format and display today’s date

PHP

When working with dates in a PHP/MySQL environment, they typically come in two formats:

  • Y-m-d H:i:s in the database (the DATETIME format)
  • d/m/Y in HTML, for display purposes

To change the format of a date, you generally go through an intermediate step: the timestamp (Unix time, or Posix time). The timestamp represents the number of seconds elapsed since January 1, 1970. You use the strtotime function to convert a date to a timestamp, then the date function to convert the timestamp to the desired format.

<?php
$date = "2020-07-09 13:30:15";
echo date("d/m/Y", strtotime($date));
// Result: 09/07/2020
?>

The problem with this method is that you are limited in your input format. In Europe, we use dates in the d/m/Y format (day/month/year), while the strtotime function expects dates in the American m/d/Y format (month/day/year).

  • If the separator is a hyphen (-), the date is considered European
  • If the separator is a slash (/), the date is considered American

Taking our example again, but simply changing the separator, nothing works anymore:

<?php
$date = "09/07/2020 13:30:15";
echo date("d/m/Y", strtotime($date));
// Result: 07/09/2020 !!!
?>

[Warning] Since PHP 8.1, strftime is deprecated. DateTime::format() provides a locale-independent replacement. IntlDateFormatter::format() provides a locale-aware replacement.

Example:

<?php
$date = "09/07/2020 13:30:15";
$dateTime = DateTime::createFromFormat("d/m/Y H:i:s", $date);
echo $dateTime->format("d/m/Y");
// Result: 09/07/2020
?>

The solution to this problem lies in the DateTime class. This class also allows you to work with dates, with the difference that you can specify the format of the input date. Dates will no longer be limited to the American format.

<?php
class DateUtils {
    public static function formatDate($date, $inputFormat, $outputFormat) {
        $dateTime = DateTime::createFromFormat($inputFormat, $date);
        return $dateTime->format($outputFormat);
    }
}
echo DateUtils::formatDate("09/07/2020 13:30:15", "d/m/Y H:i:s", "d/m/Y");
?>

Display today’s date in a localized format with PHP

To display today’s date in a localized format (e.g., French, Italian, English) with PHP, you need to:

  • Set the locale information with the setlocale function.
  • Set the default timezone with the date_default_timezone_set function.
  • Use the strftime function to format the date with the locale configuration.
  • Optionally use utf8_encode to handle encoding issues.

Note: utf8_encode is only necessary if you haven’t declared the encoding in your HTML code:

<meta charset="utf-8">

Here is the PHP code to display a date in a localized format:

<?php
setlocale(LC_TIME, "en_US.utf8", "en_US", "English_United States");
date_default_timezone_set("Europe/London");
echo utf8_encode(strftime("%A %d %B %Y, %H:%M"));
// Result: Thursday 09 July 2020, 13:31
?>

Note: replace the last line with echo strftime('%A %d %B %Y, %H:%M'); if you have declared the encoding in your HTML code.

You can find more information about strftime in the official PHP documentation.

PHP 8.1: strftime and gmstrftime functions are deprecated

The strftime and gmstrftime functions format a Unix timestamp based on the current locale settings defined with the setlocale() function.

The setlocale function sets the locale on the PHP process rather than the current worker thread. This is problematic when there are multiple worker threads.

PHP offers independent, locale-aware time formatting APIs that are better, richer, and do not suffer from this limitation. In particular, the intl extension and the IntlDateFormatter class.

<?php
$formatter = new IntlDateFormatter("en_US", IntlDateFormatter::FULL, IntlDateFormatter::SHORT);
echo $formatter->format(new DateTime());
// Result: Thursday, July 9, 2020 at 1:31 PM
?>
<?php
$formatter = new IntlDateFormatter(
    "en_US",
    IntlDateFormatter::FULL,
    IntlDateFormatter::NONE,
    "America/New_York",
    IntlDateFormatter::GREGORIAN,
    "EEEE d MMMM yyyy"
);
echo $formatter->format(new DateTime());
?>

Solution

For locale-aware date/time formatting in PHP, use IntlDateFormatter::format (requires the intl extension):

In a real-world, ideal use case, the IntlDateFormatter object is instantiated once based on the user’s locale information (from a session, a user database field, etc.).

<?php
$formatter = new IntlDateFormatter(
    "en_US",
    IntlDateFormatter::LONG,
    IntlDateFormatter::SHORT,
    "America/New_York"
);
echo $formatter->format(new DateTime());
// Result: July 9, 2020, 1:31 PM
?>

For locale-independent date/time formatting, use the date() function or DateTime::format / DateTimeImmutable::format:

<?php
echo date("d/m/Y H:i:s");
// or
echo (new DateTime())->format("d/m/Y H:i:s");
?>

DateTimeImmutable::format can also format a DateTimeImmutable object:

<?php
$date = new DateTimeImmutable("2020-07-09 13:30:15", new DateTimeZone("Europe/Paris"));
echo $date->format("d/m/Y H:i:s");
// Result: 09/07/2020 13:30:15
?>
Cat Dimension
Cat Dimension is an adventure game available on Steam: https://store.steampowered.com/app/1839780/Cat_Dimension

Recent Posts

Recent Comments

Itamde is also an online programming school.

Itamde

Learn what you want, at your own pace

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *

You may also be interested in…

Artificial intelligence is reshaping every pixel

Artificial intelligence is reshaping every pixel

Just a few years ago, editing a photo meant spending hours working meticulously in Photoshop, mastering layers, masks and curves. In 2026, everything has shifted. AI photo editing tools no longer settle for automatic filters — they understand image content, anticipate...

The 10 Best Free AI Tools for Developers in 2026

The 10 Best Free AI Tools for Developers in 2026

Artificial intelligence is transforming how developers write, test, and deploy code. In 2026, many AI tools are freely accessible, offering capabilities that would have seemed impossible just a few years ago. Whether you're a beginner or experienced developer, these...

CSS colors

CSS colors

CSS colors can be defined in hexadecimal. Hexadecimal uses three components: red, green, and blue. You can define colors in shorthand hexadecimal: for example #DC2 corresponds to #DDCC22. Note that some colors cannot be abbreviated. The goal is to shorten your...

Stay up to date with the latest news and developments

Access restricted content

Discover behind-the-scenes details of our projects, exclusive resources, and the progress of our creations in real time.

Sign up for our newsletter

Receive our news, creative insights, and updates from the studio directly in your inbox.

Follow us

Join our community on social media to follow our daily projects and interact with us.