Skip to content

Data dacie nierówna

Ostatnio trafiłem na kawałek kodu, który operował na datach.

Jego idea była prosta, to dwie funkcje, które odpowiadały za przerobienie stringa na obiekt  i w drugą stronę, z daty na stringa w odpowiednim formacie.

Idea prosta. Jednak tkwił  tym pewien haczyk.

Poniżej przykładowy kod:

function datetimeToString($value): ?string
{
if ($value instanceof \DateTime) {
return $value->format(‘Y-m-d’);
}
return null;
}

function stringToDateTime($value): ?\DateTime
{
if (!is_string($value)) {
return null;
}
return \DateTime::createFromFormat(‘Y-m-d’, $value);
}

Kod jak kod, bardzo prosty, jednak gdy przeprowadzimy poniższy kod, otrzymamy pewną niespodziankę:

$dt = new DateTime(‘1986-03-03’);
$foo = datetimeToString($dt);
$bar = stringToDateTime($foo);

var_dump($dt == $bar); // bool(false)

Pytanie dlaczego?

Gdyż stringToDateTime zwróci nam obiekt z … aktualną godziną, chociaż chcemy format Y-m-d.

Niby proste i trywialne, no przecież w funkcji DateTime, występuje słówko TIME, ale jakoś nie każdy sobie to uświadamia 🙂

Published inBez kategorii

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *