用PHP获取下一天和前一天

ton*_*lfx 66 php date

我有两个箭头设置,点击第二天,接下来的两天,很快和前一天,两天前,很快.代码似乎不起作用?因为它只能获得下一天和前一天.

<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>
Run Code Online (Sandbox Code Playgroud)

有没有办法,如果我点击下一个按钮,日期将连续更改为第二天.一会儿它只会提前一天

Ala*_*law 203

date('Y-m-d', strtotime('+1 day', strtotime($date)))
Run Code Online (Sandbox Code Playgroud)

应该读

date('Y-m-d', strtotime(' +1 day'))
Run Code Online (Sandbox Code Playgroud)

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

<?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>
Run Code Online (Sandbox Code Playgroud)

这将从您当时的日期开始增加和减少日期.


Sar*_*CSE 9

只需使用这个

echo date('Y-m-d',strtotime("yesterday"));
echo date('Y-m-d',strtotime("tomorrow"));
Run Code Online (Sandbox Code Playgroud)


小智 7

使用

$time = time();
Run Code Online (Sandbox Code Playgroud)

前一天 -

date("Y-m-d", mktime(0,0,0,date("n", $time),date("j",$time)- 1 ,date("Y", $time)));
Run Code Online (Sandbox Code Playgroud)

2天前

date("Y-m-d", mktime(0,0,0,date("n", $time),date("j",$time) -2 ,date("Y", $time)));
Run Code Online (Sandbox Code Playgroud)

第二天 -

date("Y-m-d", mktime(0,0,0,date("n", $time),date("j",$time)+ 1 ,date("Y", $time)));
Run Code Online (Sandbox Code Playgroud)

接下来的两天

date("Y-m-d", mktime(0,0,0,date("n", $time),date("j",$time) +2 ,date("Y", $time)));
Run Code Online (Sandbox Code Playgroud)


Era*_*shi 7

要求: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);
*/
Run Code Online (Sandbox Code Playgroud)

参考文献:现代PHP,新功能和良好实践作者:Josh Lockhart

  • DateInterval 实际上并不是用于此目的:),您只需执行 `(new DateTime('now+1day'))-&gt;format('Ymd')` (3认同)