PHP'de bir tarihe üç ay ekleme


90

2012-03-26$effectiveDate tarihini içeren bir değişkenim var .

Bu tarihe üç ay eklemeye çalışıyorum ve bu konuda başarısız oldum.

İşte denediğim şey:

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

ve

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

Neyi yanlış yapıyorum? Her iki kod parçası da işe yaramadı.


6
"Çalışmadı" ne anlama geliyor?
Jon

2
1340649000Doğru gibi görünen cevap olarak alıyorum .
Dogbert

Sakladığını $effectiveDatedüşündüğün şeyi sakladığından emin misin? Benim için çalışıyor .
Josh

2012-06-26 tarihini 3 ay ekleyerek 2012-03-26'ya bekliyorum
user979331

Ve hangisinin doğru olduğunu date('Y-m-d', 1340661600)verir 2012-06-26.
Tchoupi

Yanıtlar:


196

Bunu şu şekilde değiştirin, size beklenen biçimi verecektir:

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

Değişken aylarla nasıl başa çıkılır? ayların sayısı gibi $ aylar? "+ '$months' months"çalışmıyor
HKK

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

date () yerelleştirmeleri kullanmayın. Strftime () daha iyidir.
user706420

2
Bu, şu tarihler için işe yaramaz: tarih ('2018-01-31', strtotime ('+ 3 ay')). Tarih 31'de biterse ve sonraki 3 ay bitmezse, doğru tarihi döndürmez.
Dan H

3
iyi bir çözüm değil - doğru değerleri döndürmüyor - Dan H'nin bahsettiği gibi
Josef Vancura

17

Bu cevap tam olarak bu soruya değil. Ama bunu ekleyeceğim çünkü bu soru, tarihe dönem ekleme / çıkarma konusunda hala aranabilir.

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

6

"Çalışmadı" derken, size biçimlendirilmiş tarih yerine bir zaman damgası verdiğini kastettiğinizi varsayıyorum, çünkü bunu doğru bir şekilde yaptınız:

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

3

Tarihi okunabilir bir değere dönüştürmeniz gerekir. Strftime () veya date () kullanabilirsiniz.

Bunu dene:

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

Bu çalışmalı. Yerelleştirme için kullanılabileceğinden, denemek isteyebileceğiniz strftime kullanmayı daha çok seviyorum.


2

Tchoupi'nin cevabı, strtotime () argümanını aşağıdaki gibi birleştirerek biraz daha az ayrıntılı yapılabilir:

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

(Bu, sihir uygulama ayrıntılarına dayanır, ancak haklı olarak güvensizseniz her zaman onlara bir göz atabilirsiniz.)


2

Aşağıdakiler işe yaramalı, Lütfen şunu deneyin:

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

1

Aşağıdakiler işe yaramalı

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

1

N'inci Günleri, ayları ve yılları ekleyin

$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

Aşağıdakiler işe yaramalıdır, ancak biçimi değiştirmeniz gerekebilir:

echo date('l F jS, Y (m-d-Y)', strtotime('+3 months', strtotime($DateToAdjust)));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.