php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #75623 DateTime::createFromTimestamp() method
Submitted: 2017-12-04 16:42 UTC Modified: 2022-06-05 14:24 UTC
From: saifmsg at yahoo dot com Assigned:
Status: Wont fix Package: Date/time related
PHP Version: 7.1.12 OS: Linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: saifmsg at yahoo dot com
New email:
PHP Version: OS:

 

 [2017-12-04 16:42 UTC] saifmsg at yahoo dot com
Description:
------------
There need to be an easy way to create DateTime object from unix timestamp when "declare(strict_types=1)" is set. The problem is "createFromFormat" expects second parameter to be a string and it forces it to be casted into string.

There are other ways also but not quite simple (see the attached code).

It would be simple and easy if there is a factory method:
DateTime::createFromTimestamp(int $timestamp)

This was requested before the release of "strict_types", original feature request: https://bugs.php.net/bug.php?id=43595

Test script:
---------------
<?php
declare(strict_types=1);

//    get timestmap as int from model
//    for test lets set the current time.
$timestamp  = time();

//  Option: 1
$dateTime   = DateTime::createFromFormat('U', (string)$timestamp);

//  Option: 2a
$dateTime   = new DateTime();
$dateTime->setTimestamp($timestamp);

//  Option: 2b
$dateTime   = (new DateTime())->setTimestamp($timestamp);

//  While it could have been simpler:
//  $dateTime   = DateTime::createFromTimestamp($timestamp);



Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2017-12-04 16:52 UTC] requinix@php.net
new DateTime("@" . $timestamp) ?

strict_types as an argument only works as long as your value is an int. If it's a string, say from $_GET/POST or some database drivers, then it won't work and you're back to typecasting.

That said, Unix timestamps are such a widespread concept that adding a factory method specifically for them could be worthwhile.
 [2017-12-04 21:46 UTC] saifmsg at yahoo dot com
DateTime("@" . $timestamp) is just another way to type cast.

I will be surprised if anybody is storing timestamp as string in a database. And as long as strict_types is enabled it does not make sense to treat it anything else, it really helps in validating input from $_GET/$_POST.

You are right it is ubiquitous and that is why it is important.
 [2022-06-05 14:24 UTC] derick@php.net
-Status: Open +Status: Wont fix
 [2022-06-05 14:24 UTC] derick@php.net
I am marking this as "won't fix". If you are still interested in having this feature, please file a new issue at https://github.com/php/php-src/issues/ with a well defined and explained use case.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 15:01:29 2024 UTC