2012-07-08 10 views
42

Actualmente tengo php obtener la hora/fecha actual, así:Add 'x' cantidad de horas al día

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

Qué identificación como que hacer es tener una nueva variable $new_time igual $now + $hours. $hours siendo una cantidad de horas que van desde 24-800.

¿Alguna sugerencia?

+0

strtotime() http://php.net/manual/en/function.strtotime.php –

+2

Dudo si es lo que quieres Quiero que notes que "m" en "H: m: s" representa mes en dígito. Creo que querías escribir "H: i: s". Por favor verifique – Paullo

Respuesta

75

Puede usar algo como la función strtotime() para agregar algo a la marca de tiempo actual. $new_time = date("Y-m-d H:i:s", strtotime('+5 hours')).

Si necesita variables en la función, debe usar comillas dobles, como strtotime("+{$hours} hours"), pero mejor utilice strtotime(sprintf("+%d hours", $hours)).

+0

Eso funciona, pero si reemplazo el '5' con una variable, no funciona correctamente. 'strtotime ('+ $ hours hours')' –

+0

Actualicé la respuesta que debería ayudarte. – fdomig

+0

¿No quieres decir $ new_time = date ("Y-m-d H: i: s", strtotime ('+ 5 horas')? M es mes, i es minutos ... – richard

16

Puede utilizar strtotime() para lograrlo:

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

¿Qué pasa con estas respuestas usando m por minutos? – richard

+0

@RichardDesLonde Probablemente porque todos copiaron el ejemplo de código de OP. :-) – Zar

3

También puede utilizar el tiempo de estilo UNIX para calcular:

$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

mala idea, problemas con años bisiestos, segundos intercalares, horario de verano, etc. –

+0

@Dagon no, se calculará correctamente. – casraf

+0

Los años bisiestos se solucionan con este método, se puede establecer el horario de verano al usar la fecha de nuevo – Ankit

4

Um ... sus minutos deben ser corregidos ... ' Yo estoy por minutos. No meses. :) (que tenía el mismo problema por algo demasiado

$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

Una otra solución (orientado a objetos) es el uso de DateTime :: add

Ejemplo:..

$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

Tipeo pequeño aquí, el formato $ date-> probablemente debería ser $ now-> format – Patrick

0

Utilizo la siguiente función para convertir el valor de fecha y hora normal al formato de fecha y hora de 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; 
     } 

Convierte los valores de fecha y hora como,

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 

Esperamos que esto ayude a alguien.

2

Usted puede tratar lib Ouzo goodies, y hacerlo de forma fluida:

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

API de permitir múltiples operaciones.

6

correcta

Puede utilizar strtotime() para lograr esto:

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