2013-04-16 63 views
2

由於某些原因,我無法獲得strtotime('+ 1個月)的工作權限。這是我的代碼;向Unix時間戳添加1個月的問題

$Date = $_REQUEST['date']; //This is a unix time stamp 
$Start = $_REQUEST['start']; //This is a unix time stamp 
$End = $_REQUEST['end']; //This is a unix time stamp 

將一個月添加到我的日期;

$monStart =strtotime('+1 month', $Start); 
$monEnd =strtotime('+1 month', $End); 
$monDate =strtotime('+1 month', $Date); 

然後顯示我的更改日期;

$vEnd = date('m/d/Y', $monEnd); 
$vStart = date('m/d/Y', $monStart); 
$vDate = date('m/d/Y', $monDate); 

我的問題是提供的日期;

$Date = 1/31/2013 
$Start = 1/01/2013 
$End = 1/31/2013 

返回;

$vDate = 3/03/2013 
$vStart = 2/01/2013 //Only correct one 
$vEnd = 3/03/2013 

請問有人可以幫我嗎?

+0

是什麼預期值? – Otaia

+0

$ vDate = 2/28/2013,$ VStart是正確的,$ vEnd = 2/28/2013 – ipfreelly

+0

@ipfreelly有什麼問題。你想要什麼輸出 – Sabari

回答

1

DateTime更好的處理日期的功能,因爲它佔的東西好像在一個月天:

$dt = new DateTime('2013-02-01'); 
$dt->modify('+1 month'); 
echo $dt->format('Y-m-d'); 

See it in action

由於您使用時間戳,它可能是這樣的:

$dt = new DateTime('@'.$_REQUEST['start']); 
$dt->modify('+1 month'); 
echo $dt->format('m/d/Y'); 
+0

對不起,但我對此很新。所以我試過了; $ monStart = new DateTime($ Start); $ monStart-> modify('+ 1 month'); echo $ monStart-> format('Y-m-d');而我收到的所有錯誤都是錯誤的 – ipfreelly

+0

你會得到什麼錯誤? –

+0

致命錯誤:帶有消息'DateTime :: __ construct()的未捕獲異常'異常'[datetime.--construct]:無法解析位置8(0)處的時間字符串(1356998400):C:\ wamp \ www \ Invoices \ MiddlePane.php on line 11 – ipfreelly

2

它跳到3月份,因爲今天是1月31日,並增加一個月給出2月31日,w它不存在,所以它正在移動到下一個有效日期。這是一個PHP錯誤。您可以在https://bugs.php.net/bug.php?id=44073

上獲得更多信息。您可以嘗試使用DateTime來完成此場景。您可以使用此功能爲您的要求

function add_month($date_value, $months, $format = 'm/d/Y') { 
    $date = new DateTime($date_value); 
    $start_day = $date->format('j'); 

    $date->modify("+{$months} month"); 
    $end_day = $date->format('j'); 

    if ($start_day != $end_day) 
     $date->modify('last day of last month'); 

    return $date->format($format); 
} 

現在,您可以撥打:

$vEnd = add_month($monEnd, 1); 
$vStart = add_month($monStart, 1); 
$vDate = add_month($monDate, 1); 

這會給你:

$vDate = '02/28/2013'; 
$vStart = '02/01/2013'; 
$vEnd = '02/28/2013'; 

希望這有助於你:)

+0

非常感謝你,這正是我需要它的方式。 – ipfreelly

+0

@ipfreelly標記爲正確的,如果它幫助你 – Sabari