2013-04-16 2 views
2

По какой-то причине я не могу заставить strtotime ('+ 1 месяц) работать. Вот мой код;Проблемы с добавлением 1 месяца к отметке времени Unix

$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 corrtct и $ 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-> изменить ('+ 1 месяц'); echo $ monStart-> format ('Y-m-d'); и все, что я получаю, это ошибки – ipfreelly

+0

Какие ошибки вы получаете? –

+0

Неустранимая ошибка: исключение исключение «Исключение» с сообщением «DateTime :: __ construct() [datetime.--construct]: Не удалось проанализировать строку времени (1356998400) в позиции 8 (0): Неожиданный символ 'в C: \ wamp \ www \ Invoices \ MiddlePane.php в строке 11 – ipfreelly

2

Это прыгает в марте, потому что сегодня 31 января, а добавление месяца дает 31 февраля, hich не существует, поэтому он переходит на следующую действительную дату. Это ошибка 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

Смежные вопросы