php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #77840 strftime("%s") returns false results
Submitted: 2019-04-03 18:44 UTC Modified: -
Votes:3
Avg. Score:4.0 ± 0.0
Reproduced:3 of 3 (100.0%)
Same Version:1 (33.3%)
Same OS:3 (100.0%)
From: dc at ftb-esv dot de Assigned:
Status: Open Package: *General Issues
PHP Version: Irrelevant OS:
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: dc at ftb-esv dot de
New email:
PHP Version: OS:

 

 [2019-04-03 18:44 UTC] dc at ftb-esv dot de
Description:
------------
---
From manual page: https://php.net/function.strftime
---

Functions strftime() and gmstrftime() return (different) wrong results for format "%s". I tested it with PHP 5.5.14 and PHP 7.2.5, bith with CLI and Apache. I used timestamps with and without DST.

Test script:
---------------
<?PHP
header('Content-Type: text/plain; charset=utf-8');

$list = array(
    1546303600, // 2018-01-01 00:46:40 UTC
    1556703600, // 2019-05-01 09:40:00 UTC
);

echo "\ndate_default_timezone_set('UTC')\n";
date_default_timezone_set('UTC');

foreach ( $list as $time )
{
    printf("\n%u\n%4s\n%s\n",
	$time,
	strftime('%s, %F %T %Z',$time),
	gmstrftime('%s, %F %T %Z',$time) );
}

echo "\ndate_default_timezone_set('Europe/Berlin')\n";
date_default_timezone_set('Europe/Berlin');

foreach ( $list as $time )
{
    printf("\n%u\n%4s\n%s\n",
	$time,
	strftime('%s, %F %T %Z',$time),
	gmstrftime('%s, %F %T %Z',$time) );
}

?>


Expected result:
----------------
date_default_timezone_set('UTC')

1546303600
1546303600, 2019-01-01 00:46:40 UTC
1546303600, 2019-01-01 00:46:40 GMT

1556703600
1556703600, 2019-05-01 09:40:00 UTC
1556703600, 2019-05-01 09:40:00 GMT

date_default_timezone_set('Europe/Berlin')

1546303600
1546303600, 2019-01-01 01:46:40 CET
1546303600, 2019-01-01 00:46:40 GMT

1556703600
1556703600, 2019-05-01 11:40:00 CEST
1556703600, 2019-05-01 09:40:00 GMT


Actual result:
--------------
date_default_timezone_set('UTC')

1546303600
1546300000, 2019-01-01 00:46:40 UTC
1546300000, 2019-01-01 00:46:40 GMT

1556703600
1556700000, 2019-05-01 09:40:00 UTC
1556700000, 2019-05-01 09:40:00 GMT

date_default_timezone_set('Europe/Berlin')

1546303600
1546303600, 2019-01-01 01:46:40 CET
1546300000, 2019-01-01 00:46:40 GMT

1556703600
1556703600, 2019-05-01 11:40:00 CEST
1556700000, 2019-05-01 09:40:00 GMT


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2019-04-03 20:03 UTC] dave_martin at mindspring dot com
Tangentially related, the use of %s with both strftime and gmstrftime on Windows does not produce any output at all using PHP 7.3.3 64-bit thread safe.

Test script:

<?php
echo strftime ('%s',1546303600);  // results in no output
echo gmstrftime('%s',1546303600);  // results in no output
?>
 [2021-02-10 18:26 UTC] agus117 at hotmail dot com
I've got here because %s and %T also returns 'false' on PHP 5.4.60. Works as intended on 7.3+

strftime("%T", 1612978901); // expected "11:38:48" (on locale MX), but returns boolean:false

strftime("%s", 1612978901); // also returns boolean:false
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Apr 18 02:02:52 2024 UTC