2012-10-04 18 views
3

我的服務器有很多應用程序實例。默認日期()應該提前3個月

我遇到了一個問題,即我的某個應用程序實例需要在未來的日期進行測試。即我想測試應用程序,因爲它在2013年運行。

如果我更改系統日期,那麼它將正常工作,但其他實例也將生效。

我希望未來的日期只有一個實例,其餘的應該按原樣運行。

即,如果我使用日期('Y-m-d');它應該跳轉3個月並顯示未來日期。

我不想添加秒到默認日期,因爲這可能是我的應用程序的巨大變化。

+0

我的問題是,如果我回復日期('Y-m-d'),我需要從現在開始的3個月的日期。我不想更改我的服務器日期,因爲它會影響其他應用程序。 – swaroop

+0

您可以從手冊中查看[override_function](http://www.php.net/manual/en/function.override-function.php)。你知道, –

回答

0

你可以做

date('Y-m-d', time() + 3 * 30 * 24 * 3600); 
+3

個月不是全部30天。 – SDC

3

這就是爲什麼你的方式,是可驗證編寫應用程序。

不好:

function doSomething() { 
    $date = date('Y-m-d'); 
    ... 
} 

好:

function doSomething($ts = null) { 
    if (!$ts) { 
     $ts = time(); 
    } 
    $date = date('Y-m-d', $ts); 
    ... 
} 
+1

+1。所有其他答案(包括我的)都建議增加三個月的方法,但這是唯一真正理解問題本質的方法。 – SDC

2

你可以讓你自己的日期功能。它將作爲所有日期使用的鉤子。

function mydate($format) { 
    $jump = ' +3 months'; 
    return date($format, strtotime(date($format) . $jump)); 
} 

您可以用比改變date所有出現mydate。如果您決定切換回現在,請離開$jump = ''

0

我推薦使用PHP5 DateTime類。它們更羅嗦一些,但比舊式的PHP日期處理函數更強大。

$dateNow = new DateTime(); 
$dateAhead = $dateNow->add(DateInterval::createFromDateString('3 months')); 

print $dateAhead->format('Y-m-d'); 
相關問題