Добавление «+365» вместо «+1 год» сделало это. Благодарность!
Мэтт,
16
Разве это не перерыв в случае високосного года?
Jeremy1026
1
Начиная с PHP 5.1, когда вызывается без аргументов, mktime () выдает уведомление E_STRICT: вместо этого используйте функцию time ().
svandragt
Здесь тоже проголосовали против. Количество секунд в дне, дней в году, секунд в году и т.д. - все это переменные. Если вас интересует «через год», вы должны пройти через интервал «один год». Самостоятельное разделение приводит к ошибкам, связанным с високосными днями и секундами, а также к изменениям летнего времени. Хуже того, это вызывает нестабильные модульные тесты.
drobert
почему мой ответ отвергнут ?? $ addedoneyear = дата ("y") + 1; // для добавления одного года что с этим не так?
Обратите внимание, что если $ startDate уже является меткой времени (например, созданной ранее с помощью функции time () или mktime ()), а не строкой, вам не следует заключать ее в strtotime, иначе она не будет работать. Вместо этого сделайте $futureDate=date('Y-m-d',strtotime('+1 year',$startDate));как K Prime, упомянутый ниже.
Хотя это возвращает правильный ответ, другой на самом деле тоже не возвращает ошибку ... просто неправильную дату.
SeanJA
1
strtotime не вызывает ошибок. В случае ошибки возвращает false.
Фрэнк Фармер,
PHP выдает предупреждения, если часовой пояс по умолчанию не установлен ... хотя, очевидно, он имел в виду не это
SeanJA
Я получаю ошибку на ваш код я изменил , ,чтобы .и она работала date("Y-m-d",strtotime('+1 year '.$startDate));
Мухаммад Билал,
7
// Declare a variable for this year
$this_year = date("Y");
// Add 1 to the variable
$next_year = $this_year + 1;
$year_after = $this_year + 2;
// Check your codeecho"This year is ";
echo $this_year;
echo"<br />";
echo"Next year is ";
echo $next_year;
echo"<br />";
echo"The year after that is ";
echo $year_after;
strtotime()возвращается bool(false), потому что не может проанализировать строку '+one year'(не понимает «один»). falseзатем неявно приводится к integerметке времени 0. Перед тем, как вставить его в другие функции , рекомендуется убедиться, strtotime()что результат не соответствует bool(false)действительности.
Да, хорошее замечание. В моем производственном коде это будет, но я рвал на себе волосы, пытаясь заставить это работать, поэтому сократил его до минимального количества кода. Благодарность!
Есть также более простое и менее изощренное решение:
$monthDay = date('m/d');
$year = date('Y')+1;
$oneYearFuture = "".$monthDay."/".$year."";
echo"The date one year in the future is: ".$oneYearFuture."";
Ответы:
Чтобы добавить один год к сегодняшней дате, используйте следующее:
$oneYearOn = date('Y-m-d',strtotime(date("Y-m-d", mktime()) . " + 365 day"));
Для других примеров вы должны инициализировать $ StartingDate значением отметки времени, например:
$StartingDate = mktime(); // todays date as a timestamp
Попробуй это
$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 365 day"));
или
$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 1 year"));
источник
$futureDate=date('Y-m-d', strtotime('+1 year'));
$ futureDate через год!
$futureDate=date('Y-m-d', strtotime('+1 year', strtotime($startDate)) );
$ futureDate составляет один год от $ startDate!
источник
$futureDate=date('Y-m-d',strtotime('+1 year',$startDate));
как K Prime, упомянутый ниже.Пытаться:
$futureDate=date('Y-m-d',strtotime('+1 year',$startDate));
источник
,
чтобы.
и она работалаdate("Y-m-d",strtotime('+1 year '.$startDate))
;// Declare a variable for this year $this_year = date("Y"); // Add 1 to the variable $next_year = $this_year + 1; $year_after = $this_year + 2; // Check your code echo "This year is "; echo $this_year; echo "<br />"; echo "Next year is "; echo $next_year; echo "<br />"; echo "The year after that is "; echo $year_after;
источник
была такая же проблема, но это было самое простое решение:
<?php (date('Y')+1).date('-m-d'); ?>
источник
$next_year = (date('Y')+1)
.//1 year from today's date echo date('d-m-Y', strtotime('+1 year')); //1 year from from specific date echo date('22-09-Y', strtotime('+1 year'));
надеюсь, что этот более простой фрагмент кода поможет кому-то в будущем :)
источник
Я предпочитаю OO-подход:
$date = new \DateTimeImmutable('today'); //'today' gives midnight, leave blank for current time. $futureDate = $date->add(\DateInterval::createFromDateString('+1 Year'))
Используйте,
DateTimeImmutable
иначе вы тоже измените исходную дату! подробнее о DateTimeImmutable: http://php.net/manual/en/class.datetimeimmutable.phpЕсли вы просто хотите с сегодняшнего дня, вы всегда можете сделать:
new \DateTimeImmutable('-1 Month');
источник
Если вы используете PHP 5.3, это потому, что вам нужно установить часовой пояс по умолчанию:
источник
strtotime()
возвращаетсяbool(false)
, потому что не может проанализировать строку'+one year'
(не понимает «один»).false
затем неявно приводится кinteger
метке времени0
. Перед тем, как вставить его в другие функции , рекомендуется убедиться,strtotime()
что результат не соответствуетbool(false)
действительности.Из документов:
источник
Попробуй это
$nextyear = date("M d,Y",mktime(0, 0, 0, date("m",strtotime($startDate)), date("d",strtotime($startDate)), date("Y",strtotime($startDate))+1));
источник
Есть также более простое и менее изощренное решение:
$monthDay = date('m/d'); $year = date('Y')+1; $oneYearFuture = "".$monthDay."/".$year.""; echo"The date one year in the future is: ".$oneYearFuture."";
источник
Мое решение:
date('Y-m-d', time()-60*60*24*365);
Вы можете сделать его более «читабельным» с помощью определений:
define('ONE_SECOND', 1); define('ONE_MINUTE', 60 * ONE_SECOND); define('ONE_HOUR', 60 * ONE_MINUTE); define('ONE_DAY', 24 * ONE_HOUR); define('ONE_YEAR', 365 * ONE_DAY); date('Y-m-d', time()-ONE_YEAR);
источник
В моем случае (я хочу добавить 3 года к текущей дате) решение было:
$future_date = date('Y-m-d', strtotime("now + 3 years"));
Гардени, Треби и Даниэлю Лиме: что будет с 29 февраля? Иногда в феврале бывает всего 28 дней :)
источник