加上“ x”小时数


72

我目前有php返回当前的日期/时间,如下所示:

$now = date("Y-m-d H:m:s");

我想做的是有一个新变量$new_timeequal $now + $hours,其中$hours小时数从24到800不等。

有什么建议?



2
我怀疑这是否是您想要的。我希望您注意到“ H:m:s”中的“ m”代表数字月份。我相信您想写“ H:i:s”。请交叉检查
保洛

Answers:


119

您可以使用类似strtotime()函数之类的功能向当前时间戳添加内容。$new_time = date("Y-m-d H:i:s", strtotime('+5 hours'))

如果需要在函数中使用变量,则必须使用双引号,然后使用like strtotime("+{$hours} hours"),但是最好使用双引号strtotime(sprintf("+%d hours", $hours))


那行得通,但是如果我用变量替换“ 5”,它将无法正常工作。strtotime('+$hours hours')
乔纳·卡兹

1
您不是要说$ new_time = date(“ Ymd H:i:s”,strtotime('+ 5 hours')?m是月,我是分钟...
Richard

42

另一种解决方案(面向对象)是使用DateTime :: add

例:

$now = new DateTime(); //current date/time
$now->add(new DateInterval("PT{$hours}H"));
$new_time = $now->format('Y-m-d H:i:s');

PHP文档


3
这里的小写例,$ date-> format应该是$ now-> format
Patrick

21

您可以使用 strtotime()实现此目的:

$new_time = date("Y-m-d H:i:s", strtotime('+3 hours', $now)); // $now + 3 hours

@RichardDesLonde可能是因为每个人都复制了OP的代码示例。:-)
Zar

1
这对我不起作用,Rodrigo Prazim的回答确实起作用。
卢卡斯

遇到


7

您还可以使用Unix样式时间来计算:

$newtime = time() + ($hours * 60 * 60); // hours; 60 mins; 60secs
echo 'Now:       '. date('Y-m-d') ."\n";
echo 'Next Week: '. date('Y-m-d', $newtime) ."\n";

坏主意,leap年,leap秒,夏时制等问题

1
@Dagon不,它将正确计算。
卡斯拉夫

使用此方法可以节省years年,可以在再次使用日期时设置夏令时
Ankit 2012年

5

嗯...您的会议记录应该更正...'i'是会议记录。不是几个月。:)(我也遇到同样的问题。

$now = date("Y-m-d H:i:s");
$new_time = date("Y-m-d H:i:s", strtotime('+3 hours', $now)); // $now + 3 hours

4

我用它,它的工作很酷。

//set timezone
date_default_timezone_set('GMT');

//set an date and time to work with
$start = '2014-06-01 14:00:00';

//display the converted time
echo date('Y-m-d H:i',strtotime('+1 hour +20 minutes',strtotime($start)));



0

我喜欢像那样的内置php日期表达式+1 hour,但是由于某些原因,它们一直都掉在我头上。此外,我所知道的所有IDE都不建议使用自动完成功能。最后,虽然玩弄那些strtotimedate功能是没有火箭科学,我每次我需要他们谷歌的使用。

因此,我喜欢消除(至少减轻)这些问题的解决方案。这是x为日期添加小时数的样子:

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

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

本示例使用蛋白酥皮库,您可以在此处查看更多示例。



0

为“现在”增加2个小时

$date = new DateTime('now +2 hours');

要么

$date = date("Y-m-d H:i:s", strtotime('+2 hours', $now)); // as above in example

要么

$now = new DateTime();

$now->add(new DateInterval('PT2H')); // as above in example

-1

我使用以下函数将正常的日期时间值转换为mysql datetime格式。

private function ampmtosql($ampmdate) {
            if($ampmdate == '')
                return '';
            $ampm = substr(trim(($ampmdate)), -2);
            $datetimesql = substr(trim(($ampmdate)), 0, -3);
            if ($ampm == 'pm') {
                $hours = substr(trim($datetimesql), -5, 2);
                if($hours != '12')
                    $datetimesql = date('Y-m-d H:i',strtotime('+12 hour',strtotime($datetimesql)));
            }
            elseif ($ampm == 'am') {
                $hours = substr(trim($datetimesql), -5, 2);
                if($hours == '12')
                    $datetimesql = date('Y-m-d H:i',strtotime('-12 hour',strtotime($datetimesql)));
            }
            return $datetimesql;
        }

它转换日期时间值,例如

2015-06-04 09:55 AM -> 2015-06-04 09:55
2015-06-04 03:55 PM -> 2015-06-04 15:55
2015-06-04 12:30 AM -> 2015-06-04 00:55

希望这会帮助某人。


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.