2011-06-10 70 views
4

所以,我們有下面的代碼:日期格式,其時間戳超過INT限制

date("Y-m-d",time()+60*365*24*60*60); 

的IDEEA是,我必須做出一個預測,我有結果的天數,我要補充到當前日期。預測是在2060年或過去...在64位環境下工作,但在32位不太多:)

任何ideeas?

10x。

LE:

好了,所以我嘗試:

$date = new DateTime(); 
// for PHP 5.3 
$date->add(new DateInterval('P20000D')); 
// for PHP 5.2 
$date->modify('+20000day'); 
echo $date->format('Y-m-d') . "\n"; 

和它的作品

+0

數字的大小不應該有任何限制,大整數只會溢出浮游物。您是否測試過「日期」是否正確處理大數字? (適用於我,不知道它是不是在32位系統上。) – deceze 2011-06-10 08:50:26

+0

@deceze剛剛嘗試過,我得到了'致命錯誤:最大執行時間超過90秒 - 第4行' – Arvin 2011-06-10 08:52:51

+0

@deceze:it不會:)在64位和32位平臺上測試它,在64個作品上沒有32 :) – Catalin 2011-06-10 08:56:10

回答

1

看到這個:

http://www.infernodevelopment.com/forum/Thread-Solution-2038-PHP-Date-Bug-Y2-038K-UNIX-TIMESTAMP-BUG

<?php 

// Specified date/time in your computer's time zone. 
$date = new DateTime('9999-04-05'); 
echo $date->format('Y-M-j') .""; 

// Specified date/time in the specified time zone. 
$date = new DateTime('2040-09-08', new DateTimeZone('America/New_York')); 
echo $date->format('n/j/Y') . ""; 

// INPUT UNIX TIMESTAMP as float or bigint from database 
// Notice the result is in the UTC time zone. 
$r = mysql_query("SELECT date FROM test_table"); 
$obj = mysql_fetch_object($r); 

$date = new DateTime('@'.$obj->date); // a bigint(8) or FLOAT 
echo $date->format('Y-m-d H:i: sP') .""; 

// OR a constant greater than 2038: 
$date = new DateTime('@2894354000'); // 2061-09-19 
echo $date->format('Y-m-d H:i: sP') .""; 
?> 
2

這個我s工作我的32位系統上:

$date = new DateTime("2071-05-26"); 
echo $date->format('Y-m-d H:i:s'); 

//我看到這個在this問題

0

如果要添加整年/天/月,我想你可以單獨對它們使用簡單的算術題,然後使用checkdate()it claims to work up to year 32767)驗證結果

$date = array('Y' => date('Y'), 'm' => date('n'), 'd' => date('j')); 
// +60 years 
$date['Y'] += 60; 
if (checkdate($date['m'], $date['d'], $date['Y'])) { 
    $fulldate = implode('-', $date); 
} 
0
<?php 
    // A dirty hack 
    function bigdate_to_string($t_64bit) 
    { 
     $t_base = strtotime('2038-01-01 00:00:00 +0000'); 
     $t_32bit = $t_64bit - $t_base; 
     return date("Y", $t_32bit) + 68 . date("-m-d H:i:s", $t_32bit); 
    } 

    $t_64bit = 130 * 365 * 86400; // November 30, 2099 UTC 
    echo bigdate_to_string($t_64bit) . "\n"; 
?> 

輸出:

[email protected]:~$ php datehack.php 
2099-11-30 05:30:00 

我從時間減去68年並在打印格式化輸出時再次添加它。

相關問題