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
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: 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

Pull Requests

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: Sun Dec 22 03:01:28 2024 UTC