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

110

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

这在PHP中如何实现?

10个回答

231

使用DateTime

$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
这里使用的是当前日期,我需要传入一个指定的日期。 - Justin

109
 $tomorrow = date("Y-m-d", strtotime('tomorrow'));
或者
  $tomorrow = date("Y-m-d", strtotime("+1 day"));

帮助链接:STRTOTIME()


1
我使用了这个答案,它是所有答案中最短和最简单的版本,谢谢! - Bombelman
这很酷,而且还会给你昨天的日期:-1天 - bwoogie

17

由于您使用了标签,您可以像这样使用它来进行+1 day修改:

$tomorrow_timestamp = strtotime('+1 day', strtotime('2013-01-22'));

话虽如此,更好的解决方案是使用DateTime


15
<? php 

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

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

?>

17
请注意,这在一些特殊情况下会失败(比如夏令时)。 - JJJ
这个答案是错误的。我有一个 cronjob 在循环中使用它,结果系统崩溃了。 - jewelnguyen8

8

echo date ('Y-m-d',strtotime('+1 day', strtotime($your_date)));

可以翻译为:输出日期('Y-m-d'),该日期为 $your_date 日期加上一天。

5

使用DateTime

获取明天的时间:

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

结果:2017年6月28日 08:13:20

要从一个日期获取明天:

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

结果:2017年11月6日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' );

应该就可以了。


-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格式,而str_replace函数则将日期格式2019/12/10替换为-。 - Muhammad Awais Zulifqar

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

其中86400是一天的秒数。


11
不,一天并不总是拥有86400秒。 - nickb
我不明白问题所在。 请@nickb解释一下。 - Aiyion.Prime
@Aiyion。转换到或从夏令时切换的主日并不具有86400秒。 - dumazy
我想到了,夏令时是在两点钟启动的,因此不应该导致日期发生变化,对吗? - Aiyion.Prime
问题不在于夏令时。数据库中的时间应当以协调世界时 (UTC) 的形式存储,因为 UTC 没有夏令时。如果你将日期存储为 UTC,这样就可以正常工作,但可能会有些晦涩。 - braindigitalis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接