Aggiunta di tre mesi a una data in PHP


90

Ho una variabile chiamata $effectiveDatecontenente la data 2012-03-26 .

Sto cercando di aggiungere tre mesi a questa data e non ci sono riuscito.

Ecco cosa ho provato:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate));

e

$effectiveDate = strtotime(date("Y-m-d", strtotime($effectiveDate)) . "+3 months");

Che cosa sto facendo di sbagliato? Nessuno dei due pezzi di codice ha funzionato.


6
Cosa significa "non ha funzionato"?
Jon

2
Ricevo una 1340649000risposta, che sembra essere corretta.
Dogbert

Sei sicuro che $effectiveDatememorizzi ciò che pensi immagazzini? Per me funziona .
Josh

Mi aspetto che la data sia al 26/06/2012 aggiungendo 3 mesi al
26/03/2012

E date('Y-m-d', 1340661600)2012-06-26quale è corretto.
Tchoupi

Risposte:


193

Modificalo in questo ti darà il formato previsto:

$effectiveDate = date('Y-m-d', strtotime("+3 months", strtotime($effectiveDate)));

Come affrontare una variabile di mesi? come $ months contiene il numero di mesi? "+ '$months' months"non funziona
HKK

4
$offset = 5; echo date('Y-m-d', strtotime("+$offset months", strtotime('2000-01-01'))); Demo
Cees Timmerman

date () non usa le localizzazioni. Meglio strftime ().
user706420

2
Questo non funzionerà per date come questa: date ('2018-01-31', strtotime ('+ 3 month')). Se la data termina tra 31 e i prossimi 3 mesi no, non verrà restituita la data corretta.
Dan H

3
non buona soluzione - non restituisce valori corretti - come ha detto Dan H
Josef Vancura

17

Questa risposta non è esattamente a questa domanda. Ma aggiungerò questo poiché questa domanda è ancora ricercabile su come aggiungere / detrarre il periodo dalla data.

$date = new DateTime('now');
$date->modify('+3 month'); // or you can use '-90 day' for deduct
$date = $date->format('Y-m-d h:i:s');
echo $date;

5

Presumo che per "non ha funzionato" intendi che ti sta dando un timestamp invece della data formattata, perché lo stavi facendo correttamente:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate)); // returns timestamp
echo date('Y-m-d',$effectiveDate); // formatted version

3

Devi convertire la data in un valore leggibile. Puoi usare strftime () o date ().

Prova questo:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate));
$effectiveDate = strftime ( '%Y-%m-%d' , $effectiveDate );
echo $effectiveDate;

Questo dovrebbe funzionare. Mi piace usare strftime meglio in quanto può essere usato per la localizzazione potresti volerlo provare.


3

La risposta di Tchoupi può essere resa un po 'meno prolissa concatenando l'argomento per strtotime () come segue:

$effectiveDate = date('Y-m-d', strtotime($effectiveDate . "+3 months") );

(Questo si basa su dettagli di implementazione magici, ma puoi sempre dare un'occhiata a loro se sei giustamente diffidente.)


2

Quanto segue dovrebbe funzionare, per favore prova questo:

$effectiveDate = strtotime("+1 months", strtotime(date("y-m-d")));
echo $time = date("y/m/d", $effectiveDate);

1

Di seguito dovrebbe funzionare

$d = strtotime("+1 months",strtotime("2015-05-25"));
echo   date("Y-m-d",$d); // This will print **2015-06-25** 

1

Aggiungi l'ennesimo giorno, mese e anno

$n = 2;
for ($i = 0; $i <= $n; $i++){
    $d = strtotime("$i days");
    $x = strtotime("$i month");
    $y = strtotime("$i year");
    echo "Dates : ".$dates = date('d M Y', "+$d days");
    echo "<br>";
    echo "Months : ".$months = date('M Y', "+$x months");
    echo '<br>';
    echo "Years : ".$years = date('Y', "+$y years");
    echo '<br>';
}

0

Quanto segue dovrebbe funzionare, ma potrebbe essere necessario modificare il formato:

echo date('l F jS, Y (m-d-Y)', strtotime('+3 months', strtotime($DateToAdjust)));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.