|   | php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
| 
 PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits              [2009-03-20 01:59 UTC] scottmac@php.net
  [2009-03-20 14:16 UTC] berthier at imcce dot fr
 | |||||||||||||||||||||||||||
|  Copyright © 2001-2025 The PHP Group All rights reserved. | Last updated: Fri Oct 31 21:00:02 2025 UTC | 
Description: ------------ For the first 365 days of each millennium, the function strtotime() applied on a Julian Day provides a Unix timestamp whereas it should not. Moreover, the Unix timestamp is wrong and always ranges between 110638652400 and 110670188400. This bug exists for php 5.2.9 on ArchLinux 2009-02 kernel 2.6.28 x86_64 and also for php 5.2.6 on CentOS 5.2 kernel 2.6.18 x86_64. It does not exist for php 5.2.6 on OpenSuse 11.1 kernel 2.6.27 i686. Reproduce code: --------------- <?php $epoch_0 = 2400000.5476; for ($i=0; $i<=100000; $i++) { $epoch = $epoch_0 + $i; if (($timestamp = strtotime($epoch)) === FALSE) { echo $epoch." == not a timestamp!\n"; } else { echo $epoch." == timestamp = ".$timestamp." ; JD = ".unixtojd($timestamp)."\n"; } } ?> Expected result: ---------------- 2400000.5476 == not a timestamp! 2400001.5476 == not a timestamp! 2400002.5476 == not a timestamp! ... 2400365.5476 == not a timestamp! 2400366.5476 == not a timestamp! 2400367.5476 == not a timestamp! Actual result: -------------- 2400000.5476 == not a timestamp! 2400001.5476 == timestamp = 110638652400 ; JD = 3721128 2400002.5476 == timestamp = 110638738800 ; JD = 3721129 ... 2400365.5476 == timestamp = 110670102000 ; JD = 3721492 2400366.5476 == timestamp = 110670188400 ; JD = 3721493 2400367.5476 == not a timestamp!