Pergunta

estou tentando usar strtotime() para responder a um botão, clique para avançar -1 e +1 dias (dois botões) em relação ao dia avançado no clique anterior.

Exemplo:

  • É dia 10 do mês, clico no botão "-1 dia" e agora a data é 9.
  • Clico no botão "-1 dia" novamente e agora a leitura indica o 8º dia.
  • Clico no botão "+1 dia" e agora a leitura indica que é dia 9.

Eu entendo os botões e a exibição da data e o uso $_GET e PHP para passar informações, mas como faço para strtotime() trabalhar na data relativa à última vez que o roteiro de viagem no tempo foi chamado?

Meu trabalho até agora me permitiu mostrar o ontem e o hoje em relação agora mas não em relação, por exemplo, ao anteontem, ou o dia depois de Amanhã.Ou se eu usar meu "última segunda-feira" botão, um dia antes ou depois do que quer que seja esse dia.

Foi útil?

Solução

Trabalhar a partir de chamadas anteriores para o mesmo script não é uma boa ideia para esse tipo de coisa.

O que você quer fazer é sempre passar dois valores para o seu script, a data e o movimento.(o exemplo abaixo é simplificado para que você passe apenas a data, e sempre adicionará um dia a ela)

Exemplo

http://www.site.com/addOneDay.php?date=1999-12-31

<?php
   echo Date("Y-m-d",(strtoTime($_GET[date])+86400));
?>

Por favor, note que você deve verificar se isset($_GET[date]) antes também

Se você realmente deseja trabalhar a partir de chamadas anteriores para o mesmo script, terá que fazê-lo com sessões, portanto especifique se for esse o caso.

Outras dicas

Kevin, você trabalha com uma base absoluta sólida (ou seja,uma data/hora), não um período de tempo relativo.Em seguida, você converte para os períodos de tempo relativos.Assim, por exemplo, por padrão, se você estivesse mostrando um calendário, trabalharia a partir da data de hoje.

int strtotime  ( string $time  [, int $now  ] )

Você pode ver na definição da função aqui de strtotime, o segundo argumento é agora, ou seja,você pode alterar a data a partir da qual é relativo.

Isso pode ser mais fácil de exibir por meio de um loop rápido

Isso percorrerá os últimos 10 dias usando "ontem" como primeiro argumento.Em seguida, usamos data para imprimi-lo.

$time = time();

for ($i = 0; $i < 10; $i++) {
    $time = strtotime("yesterday", $time);
    print date("r", $time) . "\n";
}

Portanto, passe a hora/data através do URI para que você possa salvar a data relativa.

Após um momento de inspiração, a solução para a minha pergunta tornou-se evidente para mim (eu estava andando de bicicleta).A parte '$agora' de

strtottime( string $time {,int $now ]) 

precisa ser definido como a data atual.Não "$time()-now", mas "a data atual com a qual estou preocupado/estou olhando meu log.

ou seja:se estou olhando o resumo do quadro de horários de 10/08/2008, então isso é "agora" de acordo com strtotime();ontem é 09/08 e amanhã é 11/08.Uma vez que eu rastejo um dia, "agora" é 11/08, ontem é 10/08 e amanhã é 12/08.

Aqui está o exemplo de código:

<?php

//catch variable
$givendate=$_GET['given'];

//convert given date to unix timestamp
$date=strtotime($givendate);
echo "Date Set As...: ".date('m/d/Y',$date)."<br />";

//use given date to show day before
$yesterday=strtotime('-1 day',$date);
echo "Day Before: ".date('m/d/Y',$yesterday)."<br />";

//same for next day
$tomorrow=strtotime('+1 day',$date);
echo "Next Day: ".date('m/d/Y',$tomorrow)."<br />";
$lastmonday=strtotime('last monday, 1 week ago',$date);
echo "Last Moday: ".date('D m/d/Y',$lastmonday)."<br />";

//form
echo "<form method=\"get\" action=\"{$_SERVER['PHP_SELF']}\">";

//link to subtract a day
echo "<a href=\"newtimetravel.php?given=".date('m/d/Y',$yesterday)."\"><< </a>";

//show current day
echo "<input type=\"text\" name=\"given\" value=\"$givendate\">";

//link to add a day
echo "<a href=\"newtimetravel.php?given=".date('m/d/Y',$tomorrow)."\"> >></a><br />";

//submit manually entered day
echo "<input type=\"submit\" name=\"changetime\" value=\"Set Current Date\">";

//close form
echo "<form><br />";
?>

Clicar nos botões “<<” e “>>” avança e recua o dia em questão

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top