PHP mktime () возвращает неправильную дату

Я делаю кое-что с mktime, мне нужно добавить следующую дату еще на 30 дней, но она возвращает мне дату 1970-01-30, что я делаю не так?

$strtime=strtotime("2013-10-04");
$fecha=date("Y-m-d",$strtime);
echo $fecha."<br />";
$nueva_fecha=mktime(0,0,0,date("n",$fecha),date("j",$fecha)+30,date("Y",$fecha));
echo date("Y-m-d",$nueva_fecha)."<br />";

Результат:

2013-10-04

1970-01-30


person Enrique Benitez    schedule 04.10.2013    source источник
comment
это должно быть mktime?   -  person magicianiam    schedule 05.10.2013
comment
Есть ли другой способ ? Мне просто нужно суммировать 30 дней и получить с ним новую дату.   -  person Enrique Benitez    schedule 05.10.2013
comment
К вашему сведению, но я получил это предупреждение 3 раза при вашем вызове mktime: Примечание: неправильное числовое значение обнаружено в date.php в строке 6   -  person Chris Rasco    schedule 05.10.2013


Ответы (5)


Date ищет метку времени как второй параметр, а не строковое значение, представляющее это. Обновлено, чтобы вместо этого передать ему $ strtime.

$strtime=strtotime("2013-10-04");
$fecha=date("Y-m-d",$strtime); // <-- Unnecessary unless you want to echo the value.
echo $fecha."<br />";
$nueva_fecha=mktime(0,0,0,date("n",$strtime),date("j",$strtime)+30,date("Y",$strtime));
echo date("Y-m-d",$nueva_fecha)."<br />";

Вывод:

2013-10-04

2013-11-03

person Chris Rasco    schedule 04.10.2013

Вы можете просто использовать следующую функцию, чтобы добавить 30 дней к указанной вами дате:

$date = strtotime("2013-10-04");
$new_date = strtotime("+30 days", $date);

или просто на текущую дату:

$new_date = strototime("+30 days", time());
person Koen Wesselman    schedule 04.10.2013

Если у вас уже есть strtotime, зачем плюс на date? Вместо этого вы могли бы использовать + (30 дней в секундах) ИЛИ просто функцию, которую они вам предлагают + 1 day проверить ответ: добавление одного дня к дате

strtotime('2013-10-04 + 30 days');

Будет напечатано 2013-11-03: date('Y-m-d', strtotime('2013-10-04 + 30 days'))

person Colandus    schedule 04.10.2013

вы можете попробовать это:

echo strtotime ("+1 день"), "\ n";

echo strtotime ("+ 30 дней", strtotime (date ('D, d M Y'))), "\ n";

это добавит 30 дней к текущей дате.

Также strtotime очень полезен, вы можете использовать его еженедельно, ежемесячно и ежегодно.

person magicianiam    schedule 04.10.2013

Вы также можете использовать это

<?php

$date      = date("Y/m/d"); // example date in yyyy/mm/dd format
$unix_time = strtotime( $date ); // covert date to unix time

$sec_in_30_days  = 60 * 60 * 24 * 30; // 60 seconds * 60 minutes * 24 hours * 30 days

$new_unix_time   = $unix_time + $sec_in_30_days; // add 30 days to unix time
$date_in_30_days = date( 'Y/m/d', $new_unix_time ); // convert new unix time to date

// Output results:
echo 'original current date: ' . $date . '<br />';
echo '<br />';
echo 'new date: ' . $date_in_30_days . '<br />';

?>

Выход будет

исходная текущая дата: 04.10.2013

новая дата: 03.11.2013

person Adeel Mughal    schedule 04.10.2013