2008-08-12 15 views
6

Estoy tratando de usar strtotime() para responder a un botón haga clic para avanzar -1 y +1 días (dos botones) en relación con el día avanzado al clic anterior.Avanzando a través de fechas relativas usando strtotime()

Ejemplo:

  • Es el día 10 del mes, hago clic en el botón "-1 día", y ahora lee la fecha es la 9.
  • Hago clic en el botón "-1 día" nuevamente y ahora la lectura indica el octavo día.
  • Hago clic en el botón "+1 día" y ahora la lectura indica que es el noveno.

entiendo los botones y la visualización de la fecha, y el uso de $_GET y PHP para pasar información, pero ¿Cómo llego strtotime() para trabajar en la fecha relativa desde la última vez que el guión viaje en el tiempo se llamaba?

Mi trabajo hasta ahora me ha permitido muestro ayer y hoy en relación con ahora, pero no en relación con, por ejemplo, el día antes de ayer , o el día después de mañana . O si uso mi botón "último lunes", el día anterior o posterior a ese día.

Respuesta

5

Trabajando a partir de las llamadas anteriores a la misma escritura no es realmente una buena idea para este tipo de cosas.

Lo que quiere hacer es siempre pasar dos valores a su secuencia de comandos, la fecha y el movimiento. (El siguiente ejemplo se simplifica de manera que sólo pase la fecha, y siempre se sumará un día para ella)

Ejemplo

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

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

Tenga en cuenta que usted debe comprobar para asegurarse ese isset ($ _ GET [date]) antes también

Si realmente desea trabajar desde llamadas anteriores al mismo script, tendrá que hacerlo con sesiones, así que especifique si ese es el caso .

+0

buena respuesta, pero no se olvide de las comillas $ _GET ['date'] – Tech4Wilco

1

Kevin, trabajas desde una base absoluta sólida (es decir, una fecha/hora), no un período de tiempo relativo. Luego se convierte a los períodos de tiempo relativos. Entonces, por ejemplo, de manera predeterminada, si mostrara un calendario, trabajaría a partir de la fecha de hoy.

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

Se puede ver en la definición de la función de strtotime aquí, el segundo argumento es ahora, es decir, se puede cambiar la fecha de la que es relativa.

Esto podría ser más fácil de visualizar a través de un bucle rápida

Este bucle a través de los últimos 10 días usando "ayer" como primer argumento. Luego usamos la fecha para imprimirlo.

$time = time(); 

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

Así que pase la hora/fecha en el URI para que pueda guardar la fecha relativa.

0

Después de un momento de inspiración, la solución a mi pregunta se hizo evidente para mí (estaba montando mi bicicleta). La parte '$ now' de

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

debe establecerse como la fecha actual. No "$ time() - now", pero "la fecha actual me preocupa/estoy buscando en mi registro.

ie: si estoy viendo el resumen de la tabla de tiempos para 8/10/2008, entonces eso es "ahora" según strtotime(); ayer es 8/09 y mañana es 8/11. Una vez que me arrastro un día, "ahora" es 8/11, ayer es 8/10, y mañana es 8/12.

Aquí está el ejemplo 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 />"; 
?> 

hacer clic en el "< <" y ">>" avances y retrocesos del día en cuestión

Cuestiones relacionadas