betterCode() PHP 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');

L'exemple ci-dessus va afficher :

2000-01-01

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');

L'exemple ci-dessus va afficher :

2000-01-01

Exemple #2 Intricacies of DateTimeImmutable::__construct()

<?php
date_default_timezone_set
('America/Jamaica');

// date/time spécifié dans le fuseau horaire PHP.
$date = new DateTimeImmutable('2000-01-01');
echo
$date->format('Y-m-d H:i:sP') . "\n";

// date/time spécifié dans le fuseau horaire spécifié.
$date = new DateTimeImmutable('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo
$date->format('Y-m-d H:i:sP') . "\n";

// date/time courant dans le fuseau horaire de votre ordinateur.
$date = new DateTimeImmutable();
echo
$date->format('Y-m-d H:i:sP') . "\n";

// date/time courante dans le fuseau horaire spécifié.
$date = new DateTimeImmutable('now', new DateTimeZone('Pacific/Nauru'));
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Utilisant un horodatage UNIX. Notez que le résultat est dans le fuseau horaire UTC.
$date = new DateTimeImmutable('@946684800');
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Valeurs inexistantes sont reportées.
$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

Note:

Les dates reportées peuvent être détectées en vérifiant les avertissements à l'aide de DateTimeImmutable::getLastErrors().

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 e'), "\n";

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

2022/08/12 23:49:23 Asia/Tokyo

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
3
Dmitrii
2 years 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