การเพิ่มสามเดือนในวันที่ใน PHP


90

ฉันมีตัวแปรที่เรียกว่า$effectiveDateมีวันที่2012-03-26

ฉันพยายามเพิ่มสามเดือนในวันที่นี้และไม่ประสบความสำเร็จ

นี่คือสิ่งที่ฉันได้ลอง:

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

และ

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

ผมทำอะไรผิดหรือเปล่า? โค้ดทั้งสองชิ้นไม่ทำงาน


6
"ไม่ได้ผล" หมายความว่าอย่างไร
จอน

2
ฉันได้1340649000รับคำตอบซึ่งดูเหมือนจะถูกต้อง
Dogbert

คุณแน่ใจหรือไม่ว่า$effectiveDateเก็บสิ่งที่คุณคิดว่าเก็บไว้ การทำงานสำหรับฉัน
Josh

ฉันคาดหวังว่าวันที่ 2012-06-26 จะเพิ่มเป็น 3 เดือนใน 2012-03-26
user979331

และdate('Y-m-d', 1340661600)ให้2012-06-26สิ่งที่ถูกต้อง
Tchoupi

คำตอบ:


196

เปลี่ยนเป็นสิ่งนี้จะทำให้คุณได้รูปแบบที่คาดหวัง:

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

จะจัดการกับตัวแปรของเดือนได้อย่างไร? เช่น $ months มีจำนวนเดือน? "+ '$months' months"ไม่ทำงาน
HKK

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

วันที่ () อย่าใช้การแปล ดีกว่าคือ strftime ()
user706420

2
ซึ่งจะใช้ไม่ได้กับวันที่เช่นนี้: date ('2018-01-31', strtotime ('+ 3 month')) หากวันที่สิ้นสุดในวันที่ 31 และ 3 เดือนถัดไปไม่เป็นวันที่ที่ถูกต้อง
Dan H

3
ทางออกที่ไม่ดี - ไม่คืนค่าที่ถูกต้อง - ตามที่ Dan H กล่าว
Josef Vancura

17

คำตอบนี้ไม่ตรงกับคำถามนี้ แต่ฉันจะเพิ่มสิ่งนี้เนื่องจากคำถามนี้ยังคงค้นหาวิธีเพิ่ม / หักระยะเวลาจากวันที่

$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

ฉันถือว่า "ใช้ไม่ได้" หมายความว่าคุณกำลังให้การประทับเวลาแทนวันที่ที่จัดรูปแบบเนื่องจากคุณทำอย่างถูกต้อง:

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

3

คุณต้องแปลงวันที่เป็นค่าที่อ่านได้ คุณอาจใช้ strftime () หรือ date ()

ลองสิ่งนี้:

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

สิ่งนี้ควรใช้งานได้ ฉันชอบใช้ strftime ดีกว่าเพราะสามารถใช้สำหรับการแปลภาษาคุณอาจต้องการลองใช้


3

คำตอบของ Tchoupiสามารถทำให้ละเอียดน้อยลงโดยการต่ออาร์กิวเมนต์สำหรับ strtotime () ดังนี้:

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

(สิ่งนี้ขึ้นอยู่กับรายละเอียดการใช้งานเวทมนตร์ แต่คุณสามารถดูได้ตลอดเวลาหากคุณไม่ไว้ใจอย่างถูกต้อง)


2

สิ่งต่อไปนี้ควรใช้งานได้โปรดลองสิ่งนี้:

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


1

เพิ่มวันที่ n เดือนและปี

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.