PHP: How to get only date part from date time

Updated: January 9, 2024 By: Guest Contributor Post a comment

Overview

Managing dates and times is a common task in PHP development. At times, a developer might require just the date component from a DateTime object. This tutorial demonstrates how to extract only the date part effectively.

Understanding DateTime in PHP

PHP’s DateTime class offers a comprehensive suite of functions to handle date and time. It allows for object-oriented manipulation of dates and can be instantiated to represent a specific moment in time.

$dateTime = new DateTime('2023-03-15 08:30:00');

Once a DateTime object is created, getting just the date portion can be achieved in various ways. Let’s start with the most straightforward approach and progress towards more specific scenarios.

Using format Method

The format method is the most direct way of extracting the date. It allows formatting both date and time as strings, according to the provided format characters:

$date = $dateTime->format('Y-m-d');

This will result in a string containing only the year, month, and day, respectively. But what if we encounter different formats or requirements? Let’s delve deeper.

Dealing with Timezones

Timezones can play a crucial role when manipulating DateTime objects. To ensure the date is extracted for the correct timezone, set the timezone either during the object’s creation or before calling the format method:

$dateTime = new DateTime('now', new DateTimeZone('America/New_York'));
$date = $dateTime->format('Y-m-d');

Without specifying the timezone, PHP uses the default set in the php.ini configuration file.

Using DateTime::createFromFormat

When dealing with various date string formats, DateTime::createFromFormat becomes useful. This static method parses a date-time string according to a specified format:

$dateTime = DateTime::createFromFormat('j-M-Y', '15-Mar-2023');
$date = $dateTime->format('Y-m-d');

This also allows for the date part extraction regardless of the initial date-time string format.

Handling SQL DateTime Format

If working with SQL databases, you might retrieve a date-time in the SQL format. PHP can handle this format easily:

$sqlDateTime = '2023-03-15 08:30:00';
$dateTime = new DateTime($sqlDateTime);
$date = $dateTime->format('Y-m-d');

This precisely trims the time part off, leaving you with a clean date.

Working with Current Time

To extract the date part from the current time, simply create a new DateTime object without passing any argument, and then format it:

$dateTime = new DateTime();
$date = $dateTime->format('Y-m-d');

Utilizing DateTimeImmutable

When the application should not alter the original DateTime object, DateTimeImmutable can be used:

$immutable = new DateTimeImmutable('2023-03-15 08:30:00');
$date = $immutable->format('Y-m-d');

This guarantees that the original object remains unchanged after other operations.

Advanced Formatting with IntlDateFormatter

For localization purposes, the IntlDateFormatter comes in handy, providing locale-specific date formatting:

$formatter = new IntlDateFormatter(
    'en_US',
    IntlDateFormatter::FULL,
    IntlDateFormatter::NONE
);
$date = $formatter->format(new DateTime('2023-03-15 08:30:00'));

This not only extracts the date but also formats it according to US English conventions.

Using date() Function

Besides the DateTime object, PHP’s date() function can accomplish the same task in conjunction with strtotime():

$date = date('Y-m-d', strtotime('2023-03-15 08:30:00'));

This is less object-oriented but is still effective, particularly in legacy codebases.

Conclusion

This tutorial has covered various methods to extract just the date part from a date-time in PHP, catering to both novice and experienced developers. Implementing these techniques ensures precision and compatibility with different formats and requirements.