PHP Velho Oeste 2024

DateTime::createFromInterface

(PHP 8)

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

Description

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

Liste de paramètres

object

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

Valeurs de retour

Retourne une nouvelle instance de DateTime.

Exemples

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

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

$mutable = DateTime::createFromInterface($date);

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

add a note add a note

User Contributed Notes 2 notes

up
0
gabrielpl at gmail dot com
2 years ago
php7 polyfill:

<?php

// keep timezone and microseconds precision
function polyfillDateTimeCreateFromInterface(DateTimeInterface $dti): DateTime {
   
$tz = $dti->getTimezone();
    return new
DateTime($dti->format('Y-m-d H:i:s.u'), $tz ? $tz : null);
}

?>

Testing:

<?php

var_dump
(
  (
$a = new DateTimeImmutable()),
  (
$b = polyfillDateTimeCreateFromInterface($a)),
 
$a == $b
);

?>
up
-1
divinity76 at gmail dot com
2 years ago
php7 polyfill:

<?php

// php7 polyfill for php8' DateTime::createFromInterface
function PolyfillDateTimeCreateFromInterface(DateTimeInterface $dti):DateTime{
   
$tz = $dti->getTimezone();
   
$ret = DateTime::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 DateTimeImmutable("1970-01-01",timezone_open("Europe/Oslo"));
$dti = PolyfillDateTimeCreateFromInterface($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 DateTime 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 actual timezone name would be lost.
To Top