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ł.


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)));

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;

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

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ć.


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).


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);

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** 

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>';
}

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)));
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.