2010-03-04 17 views
12

Estoy tratando de crear una función simple que me devuelva una fecha con un cierto número de días substraídos a partir de ahora, así que algo como esto, pero no sé clases de fecha bien:Restando un cierto número de horas, días, meses o años a partir de la fecha

<? 
function get_offset_hours ($hours) { 
    return date ("Y-m-d H:i:s", strtotime (date ("Y-m-d H:i:s") /*and now?*/)); 
} 

function get_offset_days ($days) { 
    return date ("Y-m-d H:i:s", strtotime (date ("Y-m-d H:i:s") /*and now?*/)); 
} 

function get_offset_months ($months) { 
    return date ("Y-m-d H:i:s", strtotime (date ("Y-m-d H:i:s") /*and now?*/)); 
} 

function get_offset_years ($years) { 
    return date ("Y-m-d H:i:s", strtotime (date ("Y-m-d H:i:s") + $years)); 
} 

print get_offset_years (-30); 
?> 

¿Es posible hacer algo similar a esto? este tipo de función funciona durante años, pero ¿cómo hacer lo mismo con otros tipos de tiempo?

+1

Un par de casos de prueba para usted: reste 1 mes del 31 de marzo; reste un año del 29 de febrero. –

+0

¡correcto, funciona bien! – vitto

Respuesta

21

Por horas: lik

function get_offset_hours($hours) 
{ 
    return date('Y-m-d H:i:s', time() + 3600 * $hours); 
} 

Algo e que funcione bien durante horas y días (para usar 86400 días), pero durante meses y años que es un poco más complicado ...

Además también se puede hacer de esta manera:

$date = strtotime(date('Y-m-d H:i:s') . ' +1 day'); 
$date = strtotime(date('Y-m-d H:i:s') . ' +1 week'); 
$date = strtotime(date('Y-m-d H:i:s') . ' +2 weeks'); 
$date = strtotime(date('Y-m-d H:i:s') . ' +1 month'); 
$date = strtotime(date('Y-m-d H:i:s') . ' +30 days'); 
$date = strtotime(date('Y-m-d H:i:s') . ' +1 year'); 

echo(date('Y-m-d H:i:s', $date)); 
-1

algo como esto:

function offset hours($hours) { 
    return strtotime("+$hours hours"); 
} 
11

intenta utilizar datetime::sub

Ejemplo de la documentación (vinculado):

<?php 

$date = new DateTime("18-July-2008 16:30:30"); 
echo $date->format("d-m-Y H:i:s").'<br />'; 

date_sub($date, new DateInterval("P5D")); 
echo '<br />'.$date->format("d-m-Y").' : 5 Days'; 

date_sub($date, new DateInterval("P5Y5M5D")); 
echo '<br />'.$date->format("d-m-Y").' : 5 Days, 5 Months, 5 Years'; 

date_sub($date, new DateInterval("P5YT5H")); 
echo '<br />'.$date->format("d-m-Y H:i:s").' : 5 Years, 5 Hours'; 

?> 
+0

¡Si esto no funciona para usted es porque son nuevos en PHP5.3 – thetaiko

+0

desafortunadamente, tengo la versión 5.2.xx, pero lo recordaré! – vitto

Cuestiones relacionadas