将1天添加到DATETIME格式值


87

在某些情况下,我想在DATETIME格式化变量的值上加上1天:

$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));

做这个的最好方式是什么?

Answers:


63

如果要在PHP中执行此操作:

// replace time() with the time stamp you want to add one day to
$startDate = time();
date('Y-m-d H:i:s', strtotime('+1 day', $startDate));

如果要在MySQL中添加日期:

-- replace CURRENT_DATE with the date you want to add one day to
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY);

这会给我当前时间吗?我仍然需要保持用户输入的时间。
伊恩·

是的,但是我标记了您应该更改自定义时间的值。您可以替换time()strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}")
拉耶尔

这不是夏季/冬季节省!请使用DST保存日期/时间操作
steven,2017年

208

使用PHP 5.2中引入的DateTime可以实现这一目标的方法不止一种。与使用strtotime()此方法不同,它将考虑夏令时和and年。

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

// Available in PHP 5.3

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

// Available in PHP 5.4

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

// Available in PHP 5.5

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

啊,一个循环,一个循环
Funk 40 Niner 2015年

9
如果添加一天以上,则可以使用复数或单数形式,并获得相同的结果,例如:+2 day+2 days(显然+2 days在语义上更正确)
timhc22

这些方法之间的实际区别是什么?第一个例子对我来说似乎是最简单,最语义的。
BadHorsie

24

日期时间的构造函数需要一个参数string time$time可以是不同的东西,它必须尊重datetime格式

有一些有效值作为示例:

  • 'now' (默认值)
  • 2017-10-19
  • 2017-10-19 11:59:59
  • 2017-10-19 +1day

因此,您可以使用以下方法。

$dt = new \DateTime('now +1 day'); //Tomorrow
$dt = new \DateTime('2016-01-01 +1 day'); //2016-01-02

3
没有解释就回答吗?阅读我如何写一个好的答案?
Shashanth

10
  1. 使用 strtotime的字符串转换为时间戳
  2. 添加一天(例如:增加86400秒(24 * 60 * 60))

例如:

$time = strtotime($myInput);
$newTime = $time + 86400;

如果仅增加1天,则再次使用strtotime可能会过头。


所以我需要将其转换为TIMESTAMP,然后重新转换为DATETIME格式?
伊恩·

4
我猜也应该指出,并非每天都有24小时。在世界上大多数地方,夏时制(夏令时)意味着一年中的一天只有23小时,而另一天是25小时。
尼克

UPS。您将日期时间转换为时间戳,因此它是基于UTC的。而且UTC时间总是24小时。在date()考虑使用当地时区转换时,将考虑夏令时。
拉布德

5

您可以使用

$now = new DateTime();
$date = $now->modify('+1 day')->format('Y-m-d H:i:s');


1

您可以按以下方式使用。

$start_date = date('Y-m-d H:i:s');
$end_date = date("Y-m-d 23:59:59", strtotime('+3 days', strtotime($start_date)));

您还可以将天设置为常数,并按如下所示使用。

if (!defined('ADD_DAYS')) define('ADD_DAYS','+3 days');
$end_date = date("Y-m-d 23:59:59", strtotime(ADD_DAYS, strtotime($start_date)));

0

使用服务器请求时间来添加天数。工作正常。

19/05/08 => 27/09/19

$timestamp = $_SERVER['REQUEST_TIME'];
$dateNow = date('d/m/y', $timestamp);
$newDate = date('d/m/y', strtotime('+2 day', $timestamp));

在“ +2天”中添加任意天数。


0

有一种更简洁直观的方法可以将天数添加到php日期中。不要误会我的意思,这些php表达式很棒,但是您始终必须通过Google搜索如何对待它们。我想念自动补全功能。

这是我喜欢处理这些情况的方式:

(new Future(
    new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'),
    new OneDay()
))
    ->value();

对我来说,这是一种更直观,自动完成的方式。无需每次都用Google搜索解决方案。

作为一个不错的好处,您不必担心格式化结果值,它已经是ISO8601格式。

这是酥皮库,还有更多的例子在这里

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.