CascadiaPHP 2024

DateTime::createFromFormat

date_create_from_format

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

DateTime::createFromFormat -- date_create_from_formatAnalyse une heure au format texte selon le format spécifié.

Description

Style orienté objet

public static DateTime::createFromFormat(string $format, string $datetime, ?DateTimeZone $timezone = null): DateTime|false

Style procédural

Retourne un nouvel objet DateTime représentant la date et l'heure spécifiées par le texte datetime, qui a été formaté dans le format donné.

Identique à DateTimeImmutable::createFromFormat() mais crée une instance de l'objet DateTime.

Cette méthode, y compris les paramètres, les exemples et les considérations, est documentée sur la page DateTimeImmutable::createFromFormat.

Liste de paramètres

Voir DateTimeImmutable::createFromFormat.

Valeurs de retour

Retourne un nouvel objet DateTime ou false si une erreur survient.

Erreurs / Exceptions

Cette méthode lance une ValueError lorsque le datetime contient des octets NULL.

Historique

Version Description
8.0.21, 8.1.8, 8.2.0 Lance désormais une ValueError lorsque des octets NULL sont passés dans datetime, ce qui était auparavant ignoré silencieusement.

Exemples

Pour une série complète d'exemples, voir DateTimeImmutable::createFromFormat.

Voir aussi

add a note

User Contributed Notes 2 notes

up
6
Steven De Volder
10 months ago
In the following code:
$t = microtime(true);
$now = DateTime::createFromFormat('U.u', $t);
$now = $now->format("H:i:s.v");

Trying to format() will return a fatal error if microtime(true) just so happened to return a float with all zeros as decimals. This is because DateTime::createFromFormat('U.u', $aFloatWithAllZeros) returns false.

Workaround (the while loop is for testing if the solution works):

$t = microtime(true);
$now = DateTime::createFromFormat('U.u', $t);
while (!is_bool($now)) {//for testing solution
$t = microtime(true);
$now = DateTime::createFromFormat('U.u', $t);
}
if (is_bool($now)) {//the problem
$now = DateTime::createFromFormat('U', $t);//the solution
}
$now = $now->format("H:i:s.v");
up
-2
mariani dot v at sfeir dot com
6 months ago
An easiest way to avoid error when microtime returns a non decimal float is to cast its result as a float using sprintf :

$t = microtime(true);
$now = DateTime::createFromFormat('U.u', sprintf('%f', $t));
$now = $now->format("H:i:s.v");
To Top