【发布时间】: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 天添加到我的 DATETIME 格式化变量的值:
$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));
最好的方法是什么?
【问题讨论】:
在 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 在语义上更正确)
如果你想在 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']}")。
DateTime 构造函数接受一个参数string time。 $time 可以是不同的东西,它必须尊重datetime format。
有一些有效值作为例子:
'now'(默认值)2017-10-192017-10-19 11:59:592017-10-19 +1day因此,在您的情况下,您可以使用以下内容。
$dt = new \DateTime('now +1 day'); //Tomorrow
$dt = new \DateTime('2016-01-01 +1 day'); //2016-01-02
【讨论】:
strtotime 将字符串转换为时间戳例如:
$time = strtotime($myInput);
$newTime = $time + 86400;
如果只是增加 1 天,那么再次使用 strtotime 可能是矫枉过正。
【讨论】:
date() 转换回来时,会考虑本地时区,这将负责夏令时。
你可以使用
$now = new DateTime();
$date = $now->modify('+1 day')->format('Y-m-d H:i:s');
【讨论】:
你可以如下使用。
$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)));
【讨论】:
我建议从Zend Framework 开始使用Zend_Date 类。我知道,这有点离题,但我会喜欢这种方式:-)
$date = new Zend_Date();
$date->add('24:00:00', Zend_Date::TIMES);
print $date->get();
【讨论】:
使用服务器请求时间来添加天数。按预期工作。
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 天”可添加任意天数。
【讨论】:
有一种更简洁直观的方式可以为 php 日期添加天数。不要误会我的意思,那些 php 表达式很棒,但你总是要谷歌如何对待它们。我想念自动完成功能。
我喜欢这样处理这些情况:
(new Future(
new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'),
new OneDay()
))
->value();
对我来说,它更直观,自动完成功能开箱即用。无需每次都用谷歌搜索解决方案。
作为一个不错的奖励,您不必担心格式化结果值,它已经是 ISO8601 格式。
这是酥皮库,还有更多示例here。
【讨论】: