Dodanie trzech miesięcy do daty w PHP

90

Mam zmienną o nazwie $effectiveDatezawierającą datę 2012-03-26 .

Próbuję dodać trzy miesiące do tej daty i nie udało mi się.

Oto, czego próbowałem:

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

i

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

Co ja robię źle? Żaden fragment kodu nie działał.

user979331
źródło
6
Co oznacza „nie zadziałało”?
Jon
2
Otrzymuję 1340649000odpowiedź, która wydaje się być poprawna.
Dogbert
Czy na pewno $effectiveDateprzechowuje to, co myślisz, że przechowuje? U mnie to działa .
Josh
Oczekuję tej daty 2012-06-26 dodając 3 miesiące do 2012-03-26
user979331
I date('Y-m-d', 1340661600)podaje, 2012-06-26co JEST poprawne.
Tchoupi

Odpowiedzi:

193

Zmień to tak, aby uzyskać oczekiwany format:

$effectiveDate = date('Y-m-d', strtotime("+3 months", strtotime($effectiveDate)));
Tchoupi
źródło
Jak radzić sobie ze zmienną miesięcy? jak $ miesięcy zawiera liczbę miesięcy? "+ '$months' months"nie działa
HKK
4
$offset = 5; echo date('Y-m-d', strtotime("+$offset months", strtotime('2000-01-01'))); Demo
Cees Timmerman
date () nie używa lokalizacji. Lepiej jest strftime ().
user706420
2
To nie zadziała dla dat takich jak ta: date ('2018-01-31', strtotime ('+ 3 miesiące')). Jeśli data kończy się za 31, a następne 3 miesiące nie, nie zwróci prawidłowej daty.
Dan H
3
niezbyt dobre rozwiązanie - nie zwraca poprawnych wartości - jak wspomniał Dan H
Josef Vancura
17

Ta odpowiedź nie jest dokładnie na to pytanie. Ale dodam to, ponieważ to pytanie nadal jest możliwe do wyszukania, jak dodać / odjąć okres od daty.

$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;
Sadee
źródło
5

Zakładam, że przez „nie zadziałało” masz na myśli, że zamiast sformatowanej daty podajesz sygnaturę czasową, ponieważ robiłeś to poprawnie:

$effectiveDate = strtotime("+3 months", strtotime($effectiveDate)); // returns timestamp
echo date('Y-m-d',$effectiveDate); // formatted version
Nacięcie
źródło
3

Musisz przekonwertować datę na czytelną wartość. Możesz użyć strftime () lub date ().

Spróbuj tego:

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

To powinno działać. Lubię używać strftime lepiej, ponieważ można go użyć do lokalizacji, możesz go wypróbować.

JohnnyQ
źródło
3

Odpowiedź Tchoupi może być odrobinę mniej rozwlekła, konkatenując argument funkcji strtotime () w następujący sposób:

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

(Zależy to od szczegółów implementacji magii, ale zawsze możesz je obejrzeć, jeśli słusznie nie masz zaufania).

gleech
źródło
2

Poniższe powinno działać, spróbuj tego:

$effectiveDate = strtotime("+1 months", strtotime(date("y-m-d")));
echo $time = date("y/m/d", $effectiveDate);
Dipak kukadiya
źródło
1

Następujące powinno działać

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

Dodaj n-ty dni, miesiące i lata

$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>';
}
Rahul Gandhi
źródło
0

Poniższe powinny działać, ale może być konieczna zmiana formatu:

echo date('l F jS, Y (m-d-Y)', strtotime('+3 months', strtotime($DateToAdjust)));
Brendon Dugan
źródło