2009-03-18 10 views
34

Digamos que tengo una cadena entrando, "2007-02-28", ¿cuál es el código más simple que podría escribir para convertirlo en "2007-03-01"? En este momento solo estoy usando strtotime(), y luego agregué 24*60*60, luego usé date(), pero me preguntaba si habría una manera más limpia, más simple o más inteligente de hacerlo.¿La forma más simple de incrementar una fecha en PHP?

Respuesta

72

una manera limpia es utilizar strtotime()

$date = strtotime("+1 day", strtotime("2007-02-28")); 
echo date("Y-m-d", $date); 

le dará el 2007-03-01

29

Es más limpio y más fácil de añadir 86400. :)

La forma de alta tecnología es hacer:

$date = new DateTime($input_date); 
$date->modify('+1 day'); 
echo $date->format('Y-m-d'); 

pero eso es realmente sólo vale la pena si remotamente que está haciendo, por ejemplo, una secuencia de transformaciones en la fecha, en lugar de simplemente encontrar el mañana.

+1

estúpida CentOS solamente tiene PHP 5.1 y DateTime se introduce en 5.2. Supongo que finalmente tengo que actualizar a un paquete no oficial de centos php. – davr

+3

Er, no. Solo agregar 86400 es falsa simplicidad. – staticsan

+0

¿Podrías explicar a qué te refieres con eso? – chaos

16

Usted puede hacer la adición derecha dentro strtotime, por ejemplo,

$today="2007-02-28"; 
$nextday=strftime("%Y-%m-%d", strtotime("$today +1 day")); 
+0

Oh, limpio. No lo sabía Es casi como el viejo y bueno Date :: Manip. – chaos

6

Otra forma es utilizar la función mktime(). Es función muy útil ...

$date = "2007-02-28"; 
list($y,$m,$d)=explode('-',$date); 
$date2 = Date("Y-m-d", mktime(0,0,0,$m,$d+1,$y)); 

pero creo que es mejor strtotime() en esa situación ...

+0

bueno, no me di cuenta de que mktime() incrementaría el mes así cuando pases a –

5

La forma más sencilla ...

echo date('Y-m-d',strtotime("+1 day")); //from today 

O desde la fecha especificada .. .

echo date('Y-m-d',strtotime("+1 day", strtotime('2007-02-28'))); 
-1
$early_start_date = date2sql($_POST['early_leave_date']); 


     $date = new DateTime($early_start_date); 
     $date->modify('+1 day'); 


     $date_a = new DateTime($early_start_date . ' ' . $_POST['start_hr'] . ':' . $_POST['start_mm']); 
     $date_b = new DateTime($date->format('Y-m-d') . ' ' . $_POST['end_hr'] . ':' . $_POST['end_mm']); 

     $interval = date_diff($date_a, $date_b); 
0

Hel Lo puede probar esto más adelante, especialmente si usted es francés

$date = date('l j F Y'); 
#increment the date 
$date2 = date('l j F Y', strtotime("+7 day")); 

a traducir en francés puede utilizar la función setlocale() o la función a continuación:

function fr_date($date){ 

    $date = explode(' ', $date); 

    $date = str_replace('Monday','Lundi',$date); 
    $date = str_replace('Tuesday','Mardi',$date); 
    $date = str_replace('Wednesday','Mercredi',$date); 
    $date = str_replace('Thursday','Jeudi',$date); 
    $date = str_replace('Friday','Vendredi',$date); 
    $date = str_replace('Saturday','Samedi',$date); 
    $date = str_replace('Sunday','Dimanche',$date); 

    $date = str_replace('January','Janvier',$date); 
    $date = str_replace('February','Février',$date); 
    $date = str_replace('March','Mars',$date); 
    $date = str_replace('April','Avril',$date); 
    $date = str_replace('May','Mai',$date); 
    $date = str_replace('June','Juin',$date); 
    $date = str_replace('July','Juillet',$date); 
    $date = str_replace('August','Août',$date); 
    $date = str_replace('September','Septembre',$date); 
    $date = str_replace('October','Octobre',$date); 
    $date = str_replace('November','Novembre',$date); 
    $date = str_replace('December','Décembre',$date); 

    $date = implode(' ',$date); 
    return $date; 

} 
0
$your_date = strtotime("1month", strtotime(date("Y-m-d"))); 
$new_date = date("Y-m-d", $your_date++); 
+0

/("1 mes") = aumentará por mes. // ("1 día") = se incrementará por día. // (fecha ("Y-m-d")) = comienza a incrementar la fecha en su fecha actual. –

+2

Debe editar su respuesta para incluir la explicación del código, en lugar de tener la explicación en un comentario. – astidham2003

Cuestiones relacionadas