使用PHP获得第二天和前一天


72

我设置了两个箭头,单击第二天,第二天,不久和前一天(两天前,不久)。该代码似乎无法正常工作?因为第二天和前一天只有一个。

<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>

有没有一种方法,如果我单击“下一步”按钮,则日期将在第二天连续更改。暂时只有一天


1
您到底在期待什么?您的问题不清楚。
尼克,

1
您的代码为第二天创建了一个链接,为前一天创建了一个链接。你的问题是什么?
戈登

每页上$ date的值是否更改?
EmilVikström,

对不起,不清楚的问题!如果您单击第二天按钮,它将显示“第二天日期”,然后如果您再次单击,它将显示“第二天日期” ...
tonoslfx 2011年

@戈登,strtotime只需要一个电眼
艾伦·怀特劳

Answers:


222
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。


1
谢谢。如果我单击下一步按钮,是否有办法,如果您知道我的意思,第二天的日期将连续更改。暂时只会提前1天
tonoslfx 2011年

$ date = date('Ym-d'); 回声日期($ date,strtotime('-1 days')); 它没有给出以前的日期。IT仅显示当前日期。如何解决呢?

date('Ym-d',strtotime('+ 1 day',strtotime($ date)))很好。这样一来,您就可以输入要计算的日期,而不是当前日期。
基思·格雷

7

要求:PHP 5> = 5.2.0

您应该使用DateTimeDateIntervalPhp类,事情将变得非常容易和可读。

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

// 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


1
DateInterval实际上不是用于此目的的:),您可以这样做(new DateTime('now+1day'))->format('Y-m-d')
jave.web 2016年

6

采用

$time = 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)));

对于第二天-

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)));

1
您确定这在某些情况下可行吗?例如,如果当前日期是31日。当您尝试获得+1时会发生什么?
Pavel Nikolov

@PavelNikolov看一下mktime()示例#2。允许输入“ 32”之类的“错误输入”。
mgutt 2015年

3
strtotime('-1 day', strtotime($date))

这将返回给定日期和$ date。的差数(以秒为单位),因此您将得到错误的结果。

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



1

这样调用就足够了:

<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>

另请参阅文档


1

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

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

0

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;
?>

0

以防万一,如果您要从今天的日期起第二天或前一天

date(“ Ymd”,mktime(0,0,0,date(“ m”),date(“ d”)-1,date(“ Y”))));

只需将“ -1”改为“ +1”,Yosafat


0

始终确保已设置默认时区

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);


0

使用dateTime()对象也非常容易。

$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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.