PHP Conference Nagoya 2025

DateTimeImmutable::__construct

date_create_immutable

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

DateTimeImmutable::__construct -- date_create_immutableRetourne un nouvel objet DateTimeImmutable

Description

Style orienté objet

public DateTimeImmutable::__construct(string $datetime = "now", ?DateTimeZone $timezone = null)

Style procédural

Returns new a DateTimeImmutable object.

Liste de paramètres

datetime

Une chaîne date/heure. Les formats valides sont expliqués dans la documentation sur les formats Date et Heure.

Passer "now" pour obtenir le temps courant lors de l'utilisation du paramètre $timezone.

timezone

Un object DateTimeZone représentant le fuseau horaire de $datetime.

Si $timezone est omit ou null, le fuseau horaire actuel sera utilisé.

Note:

Le paramètre $timezone et le fuseau horaire actuel sont ignorés quand le paramètre $datetime est un horodatage UNIX (e.g. @946684800) ou spécifie un fuseau horaire (e.g. 2010-01-28T15:00:00+02:00 ou 2010-07-05T06:00:00Z).

Valeurs de retour

Retourne une nouvelle instance DateTimeImmutable.

Erreurs / Exceptions

Si une chaîne de date ou de temps invalide est fourni, une DateMalformedStringException est lancé. Antérieur à PHP 8.3, ceci était une Exception.

Historique

Version Description
8.3.0 Lance désormais une DateMalformedStringException si une chaîne invalide est fourni, au lieu de Exception.
7.1.0 Désormais les microsecondes sont remplis avec leur valeur actuelle. Et non '00000'.

Exemples

Exemple #1 Exemple de DateTimeImmutable::__construct()

Style orienté objet

<?php
try {
$date = new DateTimeImmutable('2000-01-01');
} catch (
Exception $e) {
echo
$e->getMessage();
exit(
1);
}

echo
$date->format('Y-m-d');
?>

Style procédural

<?php
$date
= date_create('2000-01-01');
if (!
$date) {
$e = date_get_last_errors();
foreach (
$e['errors'] as $error) {
echo
"$error\n";
}
exit(
1);
}

echo
date_format($date, 'Y-m-d');
?>

Les exemples ci-dessus vont afficher :

2000-01-01

Exemple #2 Intricacies of DateTimeImmutable::__construct()

<?php
// Specified date/time in your computer's time zone.
$date = new DateTimeImmutable('2000-01-01');
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Specified date/time in the specified time zone.
$date = new DateTimeImmutable('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Current date/time in your computer's time zone.
$date = new DateTimeImmutable();
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Current date/time in the specified time zone.
$date = new DateTimeImmutable('now', new DateTimeZone('Pacific/Nauru'));
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Using a UNIX timestamp. Notice the result is in the UTC time zone.
$date = new DateTimeImmutable('@946684800');
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Non-existent values roll over.
$date = new DateTimeImmutable('2000-02-30');
echo
$date->format('Y-m-d H:i:sP') . "\n";
?>

Résultat de l'exemple ci-dessus est similaire à :

2000-01-01 00:00:00-05:00
2000-01-01 00:00:00+12:00
2010-04-24 10:24:16-04:00
2010-04-25 02:24:16+12:00
2000-01-01 00:00:00+00:00
2000-03-01 00:00:00-05:00

Exemple #3 Changement du fuseau horaire associé

<?php
$timeZone
= new \DateTimeZone('Asia/Tokyo');

$time = new \DateTimeImmutable();
$time = $time->setTimezone($timeZone);

echo
$time->format('Y/m/d H:i:s'), "\n";
?>

Résultat de l'exemple ci-dessus est similaire à :

2022/08/12 23:49:23

Exemple #4 Utilisation d'une chaîne de date/heure relative

<?php
$time
= new \DateTimeImmutable("-1 year");

echo
$time->format('Y/m/d H:i:s'), "\n";
?>

Résultat de l'exemple ci-dessus est similaire à :

2021/08/12 15:43:51
add a note

User Contributed Notes 1 note

up
1
Dmitrii
1 year ago
"If $timezone is omitted or null, the current timezone will be used." - note, that timezone IS NOT equal offset, if its important for your application.

If default timezone = Europe/Moscow, then:
echo (new \DateTimeImmutable('2014-10'))->format(DATE_ATOM); // gives "2014-10-01T00:00:00+04:00"
echo (new \DateTimeImmutable('2014-11'))->format(DATE_ATOM); // gives "2014-11-01T00:00:00+03:00"
because of law changes (abolition of "summer time").
To Top