2010-11-04 36 views
5

Necesito hacer cálculos un poco más complicados con valores de fecha y hora desde mi base de datos MySQL con PHP.¿Cómo manejar la fecha y la hora con PHP?

Necesito sumar o restar valores diferentes de una fecha determinada.

Por ejemplo:

  • Restando 1 Mes
  • Restando 30 Días
  • Restando 4 Semanas
  • Adición de 4 Mes
  • Adición de 3 Mes
  • Adición de 90 días
  • Agregando 2 años

Tenga en cuenta que existe una diferencia entre restar 1 mes, 4 semanas o 30 días.

¿Cuál es la forma preferida de hacer esto? ¿Hay alguna biblioteca inteligente o puedo hacerlo con las propias funciones de PHP?

Respuesta

7

De http://php.net/manual/en/function.strtotime.php

<?php 
echo strtotime("now"), "\n"; 
echo strtotime("10 September 2000"), "\n"; 
echo strtotime("+1 day"), "\n"; 
echo strtotime("+1 week"), "\n"; 
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n"; 
echo strtotime("next Thursday"), "\n"; 
echo strtotime("last Monday"), "\n"; 
?> 

Puede agregar un segundo parámetro para que sea añadir a un momento dado:

echo strtotime("+1 week",$timestamp) 
1

La función de PHP strtotime es muy potente en este sentido.

Por ejemplo:

// 1 month ago 
$date = strtotime('-1 month'); 

// 30 days ago 
$date = strototime('-30 days'); 
0

intento biblioteca pera fecha. Muy potente y flexible, con capacidades de adición de períodos. Hace exactamente lo que quieres.

http://pear.php.net/Date

Nos usarlo en una aplicación web actualizada muy intensivo, donde tenemos que añadir una gran cantidad de períodos variables de tiempo y calcular el número de semana, etc.

1
<?php 
$date = date_create('2000-01-01'); 
date_add($date, date_interval_create_from_date_string('10 days')); 
echo date_format($date, 'Y-m-d'); 
?> 

$ fecha ahora será '2000-01-11'.

También puede usar date_sub para restar una cantidad de tiempo.

Más aquí:

http://www.php.net/manual/en/datetime.add.php http://www.php.net/manual/en/datetime.sub.php

5

Se puede utilizar una combinación de PHP5 de DateTime y DateInterval objetos.

$now = new DateTime(); 

// 30 days ago 
$now->sub(new DateInterval("P30D"); 

// 1 week ago 
$now->sub(new DateInterval("P1W"); 

// 2 years from now 
$now->add(new DateInterval("P1Y"); 

Para una lista de códigos de intervalo, consulte the manual

+0

+1 Pero tenga en cuenta que esto es solo para php5.3 -> http://www.php.net/manual/en/dateinterval.construct.php – AntonioCS

+1

Puede usar el método modify() de DateTime en 5.2 – StasM

0

Aquí hay otra sugerencia. si desea manipular información de mysql, intente utilizar las funciones de fecha/hora proporcionadas por mysql here

4

Desde PHP 5.2 tiene el objeto DateTime. Usted puede hacer:

$date = new DateTime; // now 
$date->modify('1 month ago'); 
echo $date->format('Y-m-d'); 

Comprobar this link para la sintaxis completa.

Cuestiones relacionadas