使用strtotime()推进相对日期

时间:2008-08-12 11:14:28

标签: php date strtotime

我正在尝试使用strtotime()来响应按钮点击,相对于前一次点击的提前一天提前-1和+1天(两个按钮)。

示例:

  • 这是本月的第10个,我点击“-1天”按钮,现在日期显示为第9个。
  • 我再次点击“-1天”按钮,现在读数显示第8天。
  • 我点击“+1天”按钮,现在读数显示它是第9个。

我理解按钮和显示日期,并使用$_GET和PHP传递信息,但如何让strtotime()处理上次时间旅行脚本的相对日期被称为?

到目前为止,我的工作让我昨天和今天相对于现在显示,但不是相对于例如前天之后。或者,如果我使用“last monday”按钮,那一天的前一天或之后的那一天。

3 个答案:

答案 0 :(得分:6)

从以前对同一个脚本的调用开始工作对于这类事情来说并不是一个好主意。

您要做的是始终将两个值传递给您的脚本,日期和移动。 (以下示例已简化,以便您只传递日期,并且它总是会添加一天)

实施例

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

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

请注意,您应该检查以确保之前的isset($ _ GET [date])

如果你真的想在之前的同一个脚本调用中工作,你将不得不使用会话,所以请指明是否属于这种情况。

答案 1 :(得分:1)

凯文,你在坚实的绝对基础(即日期/时间),而不是相对时间段。然后转换为相对时间段。因此,例如,默认情况下,如果您正在显示日历,那么您将从今天开始工作。

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传递时间/日期,以便保存相对日期。

答案 2 :(得分:0)

经过一段时间的灵感,我的问题的解决方案变得明显(我骑着自行车)。 <$ p>的'$ now'部分

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

需要设置为当前日期。不是“$ time() - now”,而是“我关注的当前日期/我正在查看我的日志。

即:如果我正在查看8/10/2008的时间表摘要,那么根据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 />";
?>

点击“&lt;&lt;&lt;”和“&gt;&gt;”提出并撤退当天的问题