php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #8242 the date('B') gives bogus output when system date is Thu Dec 14 01:56:02 EET 20
Submitted: 2000-12-13 18:59 UTC Modified: 2001-01-10 01:49 UTC
From: boian at bonev dot com Assigned:
Status: Closed Package: Date/time related
PHP Version: 4.0.3pl1 OS: Linux glibc 2.1
Private report: No CVE-ID: None
 [2000-12-13 18:59 UTC] boian at bonev dot com
Sometimes in tzones GMT+something the calculation below can give negative or time greater than 1000

the fix just checks both cases since timezone cannot add more than a day (or less respectively) or in other terms 1000 swatch beats

case 'B':       /* Swatch Beat a.k.a. Internet Time */
beat =  (((((long)the_time)-(((long)the_time) -
        ((((long)the_time) % 86400) + 3600))) * 10) / 864);

-- the fix --

if (beat < 0) beat += 1000;
if (beat > 999) beat -= 1000;

-- end fix --

sprintf(tmp_buff, "%03d", beat); /* SAFE */
strcat(return_value->value.str.val, tmp_buff);
break;

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-01-10 01:49 UTC] david@php.net
fixed with:
                while (beat < 0) {
                    beat += 1000;
                }
                beat = beat % 1000;

Swatch Internet Time is very, very sad.
 
PHP Copyright © 2001-2017 The PHP Group
All rights reserved.
Last updated: Sun Nov 19 01:31:42 2017 UTC