$ дата + 1 год? - PullRequest
       39

$ дата + 1 год?

71 голосов
/ 15 декабря 2009

Я пытаюсь получить дату, равную одному году с указанной мной даты.

Мой код выглядит так:

$futureDate=date('Y-m-d', strtotime('+one year', $startDate));

Возвращается неверная дата. Есть идеи почему?

Ответы [ 12 ]

181 голосов
/ 25 января 2013
$futureDate=date('Y-m-d', strtotime('+1 year'));

$ futureDate - через год!

$futureDate=date('Y-m-d', strtotime('+1 year', strtotime($startDate)) );

$ futureDate - это год от $ startDate!

80 голосов
/ 15 декабря 2009

Чтобы добавить один год к сегодняшней дате, используйте следующее:

$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"));
8 голосов
/ 15 декабря 2009

Попробуйте: $futureDate=date('Y-m-d',strtotime('+1 year',$startDate));

6 голосов
/ 07 января 2016
// 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;
5 голосов
/ 29 марта 2013

просто имел ту же проблему, но это было самое простое решение:

<?php (date('Y')+1).date('-m-d'); ?>
3 голосов
/ 31 июля 2017
//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'));

надеюсь, что этот простой фрагмент кода поможет кому-то в будущем:)

2 голосов
/ 14 декабря 2016

Я предпочитаю подход ОО:

$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');
2 голосов
/ 15 декабря 2009

strtotime() возвращает bool(false), потому что не может проанализировать строку '+one year' (он не понимает "один"). false затем неявно приводится к integer отметке времени 0. Хорошей идеей будет убедиться, что вывод strtotime() не bool(false) перед тем, как отправлять его в другие функции.

Из документов:

Возвращаемые значения

Возвращает метку времени при успехе, ЛОЖЬ иначе. До PHP 5.1.0 это функция вернет -1 в случае ошибки.

2 голосов
/ 15 декабря 2009

Если вы используете PHP 5.3, это потому, что вам нужно установить часовой пояс по умолчанию:

date_default_timezone_set()
1 голос
/ 15 декабря 2009

Попробуйте

$nextyear  = date("M d,Y",mktime(0, 0, 0, date("m",strtotime($startDate)),   date("d",strtotime($startDate)),   date("Y",strtotime($startDate))+1));
...