使用strtotime()推进相对日期

时间:2020-03-05 18:39:08  来源:igfitidea点击:

我正在尝试使用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])

如果我们确实想使用以前的调用来处理同一脚本,则必须在会话中进行操作,因此请指定实际情况。