将 1 天添加到 DATETIME 格式值

Posted

技术标签:

【中文标题】将 1 天添加到 DATETIME 格式值【英文标题】:adding 1 day to a DATETIME format value 【发布时间】:2010-11-20 03:39:19 【问题描述】:

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

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

最好的方法是什么?

【问题讨论】:

【参考方案1】:

php 5.2 中引入的DateTime 有不止一种方法可以做到这一点。与使用 strtotime() 不同,这将考虑夏令时和闰年。

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

【讨论】:

啊,一个循环大循环 如果添加超过一天,您可以使用复数或单数并得到相同的结果,例如:+2 day+2 days(显然+2 days 在语义上更正确) 这些方法之间的实际区别是什么?第一个例子对我来说似乎是最简单和最符合语义的。【参考方案2】:

如果你想在 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 保存日期/时间操作【参考方案3】:

DateTime 构造函数接受一个参数string time$time 可以是不同的东西,它必须尊重datetime format。

有一些有效值作为例子:

'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

【讨论】:

回答不解释?阅读How do I write a good answer?【参考方案4】:
    使用strtotime 将字符串转换为时间戳 添加一天(例如:添加 86400 秒 (24 * 60 * 60))

例如:

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

如果只是增加 1 天,那么再次使用 strtotime 可能是矫枉过正。

【讨论】:

所以我需要将其转换为 TIMESTAMP 然后再转换回 DATETIME 格式? 我想还应该注意的是,并非每天都是 24 小时。在世界上大多数地方,夏令时(夏令时)意味着一年中的一天只有 23 小时,而另一天是 25 小时。 上升。您将日期时间转换为时间戳,因此它基于 UTC。 UTC 天总是 24 小时。当使用date() 转换回来时,会考虑本地时区,这将负责夏令时。【参考方案5】:

你可以使用

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

【讨论】:

【参考方案6】:

你可以如下使用。

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

【讨论】:

【参考方案7】:

我建议从Zend Framework 开始使用Zend_Date 类。我知道,这有点离题,但我会喜欢这种方式:-)

$date = new Zend_Date();
$date->add('24:00:00', Zend_Date::TIMES);
print $date->get();

【讨论】:

你能看看我的相关(问题)[***.com/q/61421783/8919244]?【参考方案8】:

使用服务器请求时间来添加天数。按预期工作。

25/08/19 => 27/09/19

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

此处“+2 天”可添加任意天数。

【讨论】:

【参考方案9】:

有一种更简洁直观的方式可以为 php 日期添加天数。不要误会我的意思,那些 php 表达式很棒,但你总是要谷歌如何对待它们。我想念自动完成功能。

我喜欢这样处理这些情况:

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

对我来说,它更直观,自动完成功能开箱即用。无需每次都用谷歌搜索解决方案。

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

这是酥皮库,还有更多示例here。

【讨论】:

以上是关于将 1 天添加到 DATETIME 格式值的主要内容,如果未能解决你的问题,请参考以下文章

怎么样将java中的date类型插入到mysql的datetime

Sql server Varchar DateTime Column 添加 Day to Date 怎么办?

MySQL 脚本将 DateTime.Ticks 值转换为 SQL Date

mysql中date和datetime的区别

SQL 中 date 与datetime的区别

如何将 1 天添加到当前日期?