PHP,从日期获取明天的日期


88

我有一个PHP日期格式,2013-01-22我想以相同格式获取明天日期,例如2013-01-23

PHP怎么可能?

Answers:


201

使用日期时间

$datetime = new DateTime('tomorrow');
echo $datetime->format('Y-m-d H:i:s');

要么:

$datetime = new DateTime('2013-01-22');
$datetime->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');

要么:

$datetime = new DateTime('2013-01-22');
$datetime->add(new DateInterval("P1D"));
echo $datetime->format('Y-m-d H:i:s');

或在PHP 5.4+中:

echo (new DateTime('2013-01-22'))->add(new DateInterval("P1D"))
                                 ->format('Y-m-d H:i:s');

1
这使用当前,我需要传递给定的日期。
贾斯汀

第二种方法可能是最好的。
nickb 2013年



14
<? php 

//1 Day = 24*60*60 = 86400

echo date("d-m-Y", time()+86400); 

?>

17
请注意,这在极端情况下(夏时制)将失败。
JJJ 2014年

这个答案是错误的。我有一个cronjob在循环中使用它,系统死了。
jewelnguyen8'9


3

用途DateTime

为了从现在开始明天:

$d = new DateTime('+1day');
$tomorrow = $d->format('d/m/Y h.i.s');
echo $tomorrow;

结果:28/06/2017 08.13.20

为了从日期获得明天:

$d = new DateTime('2017/06/10 08.16.35 +1day')
$tomorrow = $d->format('d/m/Y h.i.s');
echo $tomorrow;

结果:11/06/2017 08.16.35

希望能帮助到你!


1
/**
 * get tomorrow's date in the format requested, default to Y-m-d for MySQL (e.g. 2013-01-04)
 *
 * @param string
 *
 * @return string
 */
public static function getTomorrowsDate($format = 'Y-m-d')
{
    $date = new DateTime();
    $date->add(DateInterval::createFromDateString('tomorrow'));

    return $date->format($format);
}

1

奇怪的是,它似乎工作得很好: date_create( '2016-02-01 + 1 day' );

echo date_create( $your_date . ' + 1 day' )->format( 'Y-m-d' );

应该做


0

首先,提出正确的抽象始终是关键。可读性,可维护性和可扩展性的关键。

在这里,很明显的候选人是ISO8601DateTime。至少有两个实现:第一个是从字符串中解析的日期时间,第二个是明日。因此,可以使用两种类别,它们的组合会产生(几乎)所需的结果:

new Tomorrow(new FromISO8601('2013-01-22'));

这两个对象都是 ISO8601日期时间,因此它们的文本表示形式并非您所需要的。因此,最后的方法是使它们采用日期格式:

new Date(
    new Tomorrow(
        new FromISO8601('2013-01-22')
    )
);

由于需要文本表示,而不仅仅是对象,因此可以调用value()方法。

有关此方法的更多信息,请查看 这篇文章


-1

这是工作功能

function plus_one_day($date){
 $date2 = formatDate4db($date);
 $date1 = str_replace('-', '/', $date2);
 $tomorrow = date('Y-m-d',strtotime($date1 . "+1 days"));
 return $tomorrow; }

formatDate4db函数有什么作用?为什么在字符串中用斜杠代替破折号?
braindigitalis

formatDate4db函数传递日期,并使其成为数据库mysql format和str_replace函数之类的格式,我具有日期格式2019/12/10,并替换为
Muhammad Awais Zulifqar 19/12/19 '14

-4
$date = '2013-01-22';
$time = strtotime($date) + 86400;
echo date('Y-m-d', $time);

其中86400是一天中的秒数。


11
不,一天并不总是有86400秒。
nickb 2013年

我没问题。请解释@nickb
Aiyion.Prime,2015年

@Aiyion。进行夏令时切换的黄金时间没有86400秒
dumazy 2015年

我想到了,夏令时是在两点钟开始的,因此永远不会导致不同的日期吗?
Aiyion.Prime

问题不是夏令时。实际上,数据库中的时间应该存储为UTC,并且没有夏令时。如果您将日期存储在UTC中,则可以正常工作,但有点麻烦。
braindigitalis
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.