使用strtotime()推进相对日期
我正在尝试使用strtotime()
来响应按钮单击,以相对于上一次单击前进的日期提前-1天和+1天(两个按钮)。
例子:
- 现在是每月的10号,我单击" -1天"按钮,现在日期显示为9号。
- 我再次单击" -1天"按钮,现在读数显示第8天。
- 我单击" +1天"按钮,现在读数显示为9日。
我理解按钮和显示日期,并使用$ _GET和PHP传递信息,但是如何使strtotime()从上次调用旅行脚本时的相对日期开始工作?
到目前为止,我的工作使我能够显示相对于现在的昨天和今天,而不是相对于例如前天或者后天。或者,如果我使用"上周一"按钮,则表示该日期之前或者之后的第二天。
解决方案
回答
凯文(Kevin),工作基于坚实的绝对基础(即日期/时间),而不是相对的时间段。然后,我们可以转换为相对时间段。因此,例如,默认情况下,如果我们显示日历,则从今天起开始工作。
int strtotime ( string $time [, int $now ] )
我们可以在strtotime的函数定义中看到第二个参数现在,即可以更改相对日期。
通过快速循环显示可能会更容易
这将使用"昨天"作为第一个参数来循环过去10天。然后,我们使用日期将其打印出来。
$time = time(); for ($i = 0; $i < 10; $i++) { $time = strtotime("yesterday", $time); print date("r", $time) . "\n"; }
因此,通过URI传递时间/日期,以便我们可以保存相对日期。
回答
经过一刻的启发,我的问题的解决方案对我来说变得显而易见了(我骑着自行车)。的" $ now"部分
strtottime( string $time {,int $now ])
需要设置为当前日期。不是" $ time()-now",而是"我关注的当前日期/我正在寻找日志。
即:如果我正在查看2008年8月10日的时间表摘要,那么根据strtotime()来看,这是"现在";昨天是8/09,明天是8/11. 当我爬上一天时,"现在"是8/11,昨天是8/10,明天是8/12.
这是代码示例:
<?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 />"; ?>
单击" <<"和" >>"前进和后退所讨论的日期
回答
对于这种类型的事情,从以前的调用到同一脚本的工作并不是一个好主意。
我们要做的是始终将两个值传递给脚本,即日期和移动。 (下面的示例已简化,因此我们只传递日期,并且总会增加一天的时间)
例子
http://www.site.com/addOneDay.php?date=1999-12-31
<?php echo Date("Y-m-d",(strtoTime($_GET[date])+86400)); ?>
请注意,我们还应该在之前确保isset($ _ GET [date])
如果我们确实想使用以前的调用来处理同一脚本,则必须在会话中进行操作,因此请指定实际情况。