Adicionar "+365" em vez de "+1 ano" resolveu. Obrigado!
Matt
16
Isso não quebraria no caso de um ano bissexto?
Jeremy1026
1
A partir do PHP 5.1, quando chamado sem argumentos, mktime () lança um aviso E_STRICT: use a função time () ao invés.
svandragt
Votos negativos aqui também. O número de segundos em um dia, dias em um ano, segundos em um ano, etc. são todos variáveis. Se você está interessado em 'daqui a um ano', você deve passar em um intervalo de 'um ano'. Subdividir por conta própria é o que leva a erros em dias bissextos e segundos bissextos e mudanças de horário de verão. Pior ainda, isso causa testes de unidade de flappy.
drobert de
por que minha resposta foi rejeitada ?? $ addedoneyear = date ("y") + 1; // por adicionar um ano, o que há de errado nisso?
Observe que se $ startDate já for um timestamp (como um criado anteriormente com a função time () ou mktime ()) e não uma string, você não deve envolvê-lo em strtotime ou não funcionará. Em vez disso, faça $futureDate=date('Y-m-d',strtotime('+1 year',$startDate));como K Prime mencionado abaixo.
Enquanto isso retorna a resposta certa, o outro também não retorna um erro ... apenas a data errada.
SeanJA
1
strtotime não gera erros. Ele retorna falso em caso de erro.
Frank Farmer
O PHP irá lançar avisos se o fuso horário padrão não for definido ... embora aparentemente não seja isso o que ele quis dizer
SeanJA
Eu estava recebendo um erro no seu código ,para o qual mudei .e funcionou date("Y-m-d",strtotime('+1 year '.$startDate));
Muhammad Bilal
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()está retornando bool(false), porque ele não pode analisar a string '+one year'(ele não entende "um"). falseestá sendo implicitamente convertido para o integercarimbo de data / hora 0. É uma boa ideia verificar se strtotime()a saída de não está bool(false)antes de você colocá-la em outras funções.
Sim, bom ponto. Meu código de produção terá isso, mas eu estava arrancando meus cabelos tentando fazer isso funcionar, então reduzi-o ao mínimo de código possível. Obrigado!
Também existe uma solução mais simples e menos sofisticada:
$monthDay = date('m/d');
$year = date('Y')+1;
$oneYearFuture = "".$monthDay."/".$year."";
echo"The date one year in the future is: ".$oneYearFuture."";
Respostas:
Para adicionar um ano à data de hoje, use o seguinte:
$oneYearOn = date('Y-m-d',strtotime(date("Y-m-d", mktime()) . " + 365 day"));
Para os outros exemplos, você deve inicializar $ StartingDate com um valor de carimbo de data / hora, por exemplo:
$StartingDate = mktime(); // todays date as a timestamp
Tente isto
$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 365 day"));
ou
$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 1 year"));
fonte
$futureDate=date('Y-m-d', strtotime('+1 year'));
$ futureDate é daqui a um ano!
$futureDate=date('Y-m-d', strtotime('+1 year', strtotime($startDate)) );
$ futureDate é um ano a partir de $ startDate!
fonte
$futureDate=date('Y-m-d',strtotime('+1 year',$startDate));
como K Prime mencionado abaixo.Tentar:
$futureDate=date('Y-m-d',strtotime('+1 year',$startDate));
fonte
,
para o qual mudei.
e funcionoudate("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;
fonte
apenas tive o mesmo problema, porém esta foi a solução mais simples:
<?php (date('Y')+1).date('-m-d'); ?>
fonte
$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'));
espero que este código mais simples ajude alguém no futuro :)
fonte
Eu prefiro a abordagem OO:
$date = new \DateTimeImmutable('today'); //'today' gives midnight, leave blank for current time. $futureDate = $date->add(\DateInterval::createFromDateString('+1 Year'))
Use,
DateTimeImmutable
caso contrário, você modificará a data original também! mais sobre DateTimeImmutable: http://php.net/manual/en/class.datetimeimmutable.phpSe você quer apenas a partir da data de hoje, você sempre pode fazer:
new \DateTimeImmutable('-1 Month');
fonte
Se você estiver usando PHP 5.3, é porque precisa definir o fuso horário padrão:
fonte
strtotime()
está retornandobool(false)
, porque ele não pode analisar a string'+one year'
(ele não entende "um").false
está sendo implicitamente convertido para ointeger
carimbo de data / hora0
. É uma boa ideia verificar sestrtotime()
a saída de não estábool(false)
antes de você colocá-la em outras funções.Dos documentos:
fonte
Tente isto
$nextyear = date("M d,Y",mktime(0, 0, 0, date("m",strtotime($startDate)), date("d",strtotime($startDate)), date("Y",strtotime($startDate))+1));
fonte
Também existe uma solução mais simples e menos sofisticada:
$monthDay = date('m/d'); $year = date('Y')+1; $oneYearFuture = "".$monthDay."/".$year.""; echo"The date one year in the future is: ".$oneYearFuture."";
fonte
Minha solução é:
date('Y-m-d', time()-60*60*24*365);
Você pode torná-lo mais "legível" com definições:
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);
fonte
No meu caso (quero adicionar 3 anos à data atual), a solução foi:
$future_date = date('Y-m-d', strtotime("now + 3 years"));
Para Gardenee, Treby e Daniel Lima: o que vai acontecer no dia 29 de fevereiro? Às vezes, fevereiro tem apenas 28 dias :)
fonte