2012-07-08 80 views
42

我现在有PHP获取当前时间/日期,像这样:增加“X”的时间量至今

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

喜欢什么ID做的是有一个新的变量$new_time等于$now + $hours$hours是的时间从任何地方24-800范围的量。

有什么建议吗?

+0

的strtotime()http://php.net/manual/en/function.strtotime.php – 2012-07-08 20:14:24

+2

我怀疑如果这是你想要的。我希望你注意到“H:m:s”中的“m”代表数字上的月份。我相信你想写“H:我:S”。请交叉检查 – Paullo 2014-08-14 14:59:57

回答

75

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

如果您需要函数中的变量,则必须使用双引号,然后像strtotime("+{$hours} hours")那样,但是您可以更好地使用strtotime(sprintf("+%d hours", $hours))

+0

这样的作品,但如果我有一个变量替换“5”,它不正常工作。 '的strtotime('+ $小时小时)' – 2012-07-08 20:30:44

+0

我更新了答案,应该帮助你。 – fdomig 2012-07-08 20:33:48

+0

难道你的意思是$ NEW_TIME =日期( “Y-M-d H:我:s” 吗?,的strtotime('+ 5小时),m为一个月,我是分钟... ... – richard 2013-08-14 07:54:35

16

您可以使用strtotime()来实现这一目标:

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

这些答案用m分钟怎么了? – richard 2013-08-14 07:55:38

+0

@RichardDesLonde可能因为每个人都复制了OP的代码示例。 :-) – Zar 2013-08-14 12:01:53

3

您还可以使用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"; 
+0

不好主意,闰年问题,闰秒问题,夏令时问题等。 – 2012-07-08 20:17:53

+0

@Dagon不,它会正确计算。 – casraf 2012-07-08 20:19:46

+0

闰年照顾使用这种方法,可以在使用日期时再设置夏令时 – Ankit 2012-07-08 20:20:52

4

嗯......你分钟应予纠正......“我'是分钟。不是几个月。 :)(我有同样的问题的东西太多

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

的其他解决方案(面向对象)是使用日期时间::加

例:

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

PHP documentation

+3

这里的小tyop,$ date->格式可能应该是$ now-> format – Patrick 2015-01-11 22:18:48

0

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

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; 
     } 

它可以转换像datetime值,

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 

希望这会帮助别人。

2

你可以试试LIB Ouzo goodies,并用流利的方式做到这一点:

echo Clock::now()->plusHours($hours)->format("Y-m-d H:m:s"); 

的API允许多个操作。

6

正确

可以使用的strtotime()来实现这一目标:

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