PHP Velho Oeste 2024

DateTimeImmutable::createFromInterface

(PHP 8)

DateTimeImmutable::createFromInterfaceRetourne un nouvel objet DateTimeImmutable encapsulant l'objet DateTimeInterface fourni

Description

public static DateTimeImmutable::createFromInterface(DateTimeInterface $object): DateTimeImmutable

Liste de paramètres

object

L'objet DateTimeInterface qui doit être converti en une version immutable. Cet objet n'est pas modifié, mais une nouvelle instance d'objet DateTimeImmutable est créé contenant les même informations de date, temps, et fuseau horaire.

Valeurs de retour

Retourne une nouvelle instance de DateTimeImmutable.

Exemples

Exemple #1 Création d'un objet de date et temps immutable

<?php
$date
= new DateTime("2014-06-20 11:45 Europe/London");

$immutable = DateTimeImmutable::createFromInterface($date);

$date = new DateTimeImmutable("2014-06-20 11:45 Europe/London");
$also_immutable = DateTimeImmutable::createFromInterface($date);
?>

add a note add a note

User Contributed Notes 1 note

up
1
divinity76 at gmail dot com
2 years ago
php7 polyfill:
<?php
function PolyfillDateTimeImmutableCreateFromInterface(DateTimeInterface $dti):DateTimeImmutable{
   
$tz = $dti->getTimezone();
   
$ret = DateTimeImmutable::createFromFormat(DateTimeInterface::RFC3339, $dti->format(DateTimeInterface::RFC3339));
    if(!!
$tz){
       
// without this: timezone +01:00
        // with this: timezone Europe/Oslo
       
$ret = $ret->setTimezone($tz);
    }
    return
$ret;
}

?>

testing it:
<?php
$dt
= new DateTime("1970-01-01",timezone_open("Europe/Oslo"));
$dti = PolyfillDateTimeImmutableCreateFromInterface($dt);
var_dump($dti->format(DateTime::RFC3339), $dti->getTimezone());
die();
?>
gives:

string(25) "1970-01-01T00:00:00+01:00"
object(DateTimeZone)#2 (2) {
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(11) "Europe/Oslo"
}

- and warning: using the TimeZone argument of the DateTimeImmutable constructor is a trap, in the example above if i used the constructor argument instead of setTimezone(), it would become "timezone_type=>1 timezone=>+01:00" instead of "timezone=>europe/oslo", the timezone name would be lost.
To Top