【问题标题】:get next and previous day with PHP使用 PHP 获取第二天和前一天
【发布时间】:2011-08-18 12:30:20
【问题描述】:

我已经设置了两个箭头,点击后天,后两天,不久和前一天,两天前,不久。代码似乎不起作用?因为它只在第二天和前一天得到一个。

<a href="home.php?date=<?= date('Y-m-d', strtotime('-1 day', strtotime($date))) ?>" class="prev_day" title="Previous Day" ></a> 
<a href="home.php?date=<?= date('Y-m-d', strtotime('+1 day', strtotime($date))) ?>" class="next_day" title="Next Day" ></a>

如果我点击下一个按钮,有没有办法让第二天的日期不断变化。暂时只会提前一天

【问题讨论】:

  • 您期待什么?你的问题不清楚。
  • 您的代码为第二天创建一个链接,为前一天创建一个链接。你有什么问题?
  • 每页上$date的值有变化吗?
  • 抱歉问题不清楚!如果,你点击第二天按钮,它会显示'第二天日期',然后如果你再次点击,它会显示'接下来的两天日期'......
  • @Gordon, strtotime 只需要一个参数

标签: php date


【解决方案1】:
date('Y-m-d', strtotime('+1 day', strtotime($date)))

应该阅读

date('Y-m-d', strtotime(' +1 day'))

更新以回答评论中关于不断更改日期的问题。

<?php
$date = isset($_GET['date']) ? $_GET['date'] : date('Y-m-d');
$prev_date = date('Y-m-d', strtotime($date .' -1 day'));
$next_date = date('Y-m-d', strtotime($date .' +1 day'));
?>

<a href="?date=<?=$prev_date;?>">Previous</a>
<a href="?date=<?=$next_date;?>">Next</a>

这会将日期从您当时所在的日期加一或减一。

【讨论】:

  • 谢谢。如果我点击下一个按钮,有没有办法,如果你知道我的意思,第二天的日期会不断改变。暂时只会提前 1 天
  • $date=date('Y-m-d'); echo date($date,strtotime('-1 days'));它没有给出之前的日期。 IT 仅显示当前日期。如何解决?
  • date('Y-m-d', strtotime('+1 day', strtotime($date))) 没问题。这使您可以输入计算的日期,而不是当前日期。
【解决方案2】:

要求:PHP 5 >= 5.2.0

你应该使用 Php 中的 DateTimeDateInterval 类,事情就会变得非常简单易读。

示例:让我们获取前一天。

// always make sure to have set your default timezone
date_default_timezone_set('Europe/Berlin');

// create DateTime instance, holding the current datetime
$datetime = new DateTime();

// create one day interval
$interval = new DateInterval('P1D');

// modify the DateTime instance
$datetime->sub($interval);

// display the result, or print_r($datetime); for more insight 
echo $datetime->format('Y-m-d');


/** 
* TIP:
* if you dont want to change the default timezone, use
* use the DateTimeZone class instead.
*
* $myTimezone = new DateTimeZone('Europe/Berlin');
* $datetime->setTimezone($myTimezone); 
*
* or just include it inside the constructor 
* in this form new DateTime("now",   $myTimezone);
*/

参考资料:现代 PHP、新特性和良好实践 乔什·洛克哈特(Josh Lockhart)

【讨论】:

  • DateInterval 实际上并非用于此目的:),您可以这样做 (new DateTime('now+1day'))-&gt;format('Y-m-d')
【解决方案3】:

使用

$time = time();

前一天 -

date("Y-m-d", mktime(0,0,0,date("n", $time),date("j",$time)- 1 ,date("Y", $time)));

两天前

date("Y-m-d", mktime(0,0,0,date("n", $time),date("j",$time) -2 ,date("Y", $time)));

第二天-

date("Y-m-d", mktime(0,0,0,date("n", $time),date("j",$time)+ 1 ,date("Y", $time)));

接下来的 2 天

date("Y-m-d", mktime(0,0,0,date("n", $time),date("j",$time) +2 ,date("Y", $time)));

【讨论】:

  • 你确定这在极端情况下有效吗?例如,如果当前日期是 31 日。当您尝试获得 +1 时会发生什么?
  • @PavelNikolov 看看mktime() example #2。允许像“32”这样的“错误输入”。
【解决方案4】:

只需使用这个

echo date('Y-m-d',strtotime("yesterday"));
echo date('Y-m-d',strtotime("tomorrow"));

【讨论】:

    【解决方案5】:
    strtotime('-1 day', strtotime($date))
    

    这将返回给定日期和 $date 的秒数差异。所以你得到了错误的结果。

    假设 $date 是今天的日期,-1 天意味着它返回 -86400 作为差异,当您尝试使用日期时,您将得到 1969-12-31 Unix 时间戳开始日期。

    【讨论】:

      【解决方案6】:

      这样称呼就够了:

      <a href="home.php?date=<?= date('Y-m-d', strtotime('-1 day')) ?>" class="prev_day" title="Previous Day" ></a>
      <a href="home.php?date=<?= date('Y-m-d', strtotime('+1 day')) ?>" class="next_day" title="Next Day" ></a>
      

      另见documentation

      【讨论】:

        【解决方案7】:

        您可以使用 'now' 作为字符串来获取今天/明天/昨天的日期:

        $previousDay = date('Y-m-d', strtotime('now - 1day'));
        $toDay       = date('Y-m-d', strtotime('now'));
        $nextDay     = date('Y-m-d', strtotime('now + 1day'));
        

        【讨论】:

          【解决方案8】:

          PHP 脚本 -1**** 到下一个日期

          <?php
          
          $currentdate=date('Y-m-d');
          
          
          $date_arr=explode('-',$currentdate);
          
          
          $next_date=
          Date("Y-m-d",mktime(0,0,0,$date_arr[1],$date_arr[2]+1,$date_arr[0]));
          
          
          
          echo $next_date;
          ?>**
          
          **Php script -1****its to Next year**
          
          
          <?php
          
          $currentdate=date('Y-m-d');
          
          
          $date_arr=explode('-',$currentdate);
          
          
          $next_date=
          Date("Y-m-d",mktime(0,0,0,$date_arr[1],$date_arr[2],$date_arr[0]+1));
          
          
          
          echo $next_date;
          ?>
          

          【讨论】:

            【解决方案9】:

            以防万一您想从今天开始的第二天或前一天

            date("Y-m-d", mktime(0, 0, 0, date("m"),date("d")-1,date("Y")));

            只需将“-1”更改为“+1” 问候,约萨法特

            【讨论】:

              【解决方案10】:

              始终确保设置了默认时区

              date_default_timezone_set('Europe/Berlin');
              

              创建 DateTime 实例,保存当前日期时间

              $datetime = new DateTime();
              

              创建一天的间隔

              $interval = new DateInterval('P1D');
              

              修改 DateTime 实例

              $datetime->sub($interval);
              

              显示结果,或print_r($datetime); 了解更多信息

              echo $datetime->format('Y-m-d');
              

              提示:

              如果您不想更改默认时区,请改用DateTimeZone 类。

              $myTimezone = new DateTimeZone('Europe/Berlin');
              $datetime->setTimezone($myTimezone); 
              

              或者只是以new DateTime("now", $myTimezone);这种形式将其包含在构造函数中

              【讨论】:

                【解决方案11】:

                dateTime() object 也很容易。

                $tomorrow = new DateTime('tomorrow');
                echo $tomorrow->format("Y-m-d"); // Tomorrow's date
                
                $yesterday = new DateTime('yesterday');
                echo $yesterday->format("Y-m-d"); // Yesterday's date
                

                【讨论】:

                  猜你喜欢
                  • 2016-07-18
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-08-17
                  • 1970-01-01
                  相关资源
                  最近更新 更多