การเพิ่มวันเป็น $ Date ใน PHP


216

ฉันมีวันที่คืนซึ่งเป็นส่วนหนึ่งของแบบสอบถาม mySQL ในแบบฟอร์ม 2010-09-17

ฉันต้องการตั้งค่าตัวแปร $ Date2 เป็น $ Date5 ดังต่อไปนี้:

$Date2 = $Date + 1

$Date3 = $Date + 2

ฯลฯ ..

เพื่อที่จะส่งกลับ2010-09-18, 2010-09-19ฯลฯ ...

ฉันเหนื่อย

date('Y-m-d', strtotime($Date. ' + 1 day'))

$Dateแต่เรื่องนี้ทำให้ผมวันก่อน

วิธีที่ถูกต้องในการรับวันที่ของฉันในรูปแบบรูปแบบ 'Ymd' เพื่อให้สามารถใช้ในการค้นหาอื่นได้อย่างไร


คำตอบ:


447

สิ่งที่คุณต้องทำคือใช้daysแทนdayสิ่งนี้:

<?php
$Date = "2010-09-17";
echo date('Y-m-d', strtotime($Date. ' + 1 days'));
echo date('Y-m-d', strtotime($Date. ' + 2 days'));
?>

และมันส่งออกอย่างถูกต้อง:

2010-09-18
2010-09-19

7
มันแสดงผลอย่างถูกต้องโดยใช้day... date("Y-m-d", strtotime('2010-09-17 + 1 day'))-> 2010-09-18, date("Y-m-d", strtotime('2010-09-17 + 2 day'))->2010-09-19
Daniel Vandersluis

ลองใช้วิธีนี้และใช้งานได้ ฉันยังไม่รู้เลยว่าทำไมฉันถึงได้ค่าหนึ่งวันก่อนวันเริ่มต้นของฉันเมื่อฉันลองมันครั้งแรก
Istari

จะเกิดอะไรขึ้นถ้าฉันมีตัวแปรสำหรับจำนวนวันที่จะเพิ่ม
Carlos Martins

3
@Carlos echo date ("Ymd", strtotime ($ Date. '+'. $ variable. 'days'));
Pradeep Kumar Prabaharan

ไม่วิธีนี้ใช้ไม่ได้เลย จะส่งคืนวันที่บางส่วนของปี 2004
gegobyte

81

หากคุณใช้ PHP 5.3 คุณสามารถใช้DateTimeวัตถุและaddวิธีการได้ดังนี้

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->add(new DateInterval('P1D')); // P1D means a period of 1 day
$Date2 = $date->format('Y-m-d');

ลองดูที่หน้าคู่มือผู้DateIntervalสร้างเพื่อดูวิธีการสร้างช่วงเวลาอื่น ๆ เพื่อเพิ่มในวันที่ของคุณ (2 วันจะเป็น'P2D'3 จะเป็น'P3D'และอื่น ๆ )

หากไม่มี PHP 5.3 คุณควรจะสามารถใช้strtotimeวิธีที่คุณทำได้ (ฉันได้ทดสอบแล้วและใช้งานได้ทั้ง 5.1.6 และ 5.2.10):

$Date1 = '2010-09-17';
$Date2 = date('Y-m-d', strtotime($Date1 . " + 1 day"));
// var_dump($Date2) returns "2010-09-18"

ขออภัย Daniel แต่เว็บเซิร์ฟเวอร์ใช้งาน php 5.2.6 ดังนั้นสิ่งนี้จะใช้ไม่ได้
Istari

2
DateTime::constructใช้กลไกเดียวstrtotimeกับการวิเคราะห์วันที่ดังนั้นคุณสามารถทำได้new DateTime("+1 day $date")โดยไม่ต้องใช้ 5.3
Gordon

ฉันไม่ได้ตั้งใจจะลงคะแนนสิ่งนี้ แต่อย่างใดฉันได้ = /
Steven

นี่คือคำตอบที่แท้จริงสำหรับ php 5.5+
TheLegendaryCopyCoder

29

จาก PHP 5.2 บนคุณสามารถใช้แก้ไขด้วยวัตถุ DateTime:

http://php.net/manual/en/datetime.modify.php

$Date1 = '2010-09-17';
$date = new DateTime($Date1);
$date->modify('+1 day');
$Date2 = $date->format('Y-m-d');

ระมัดระวังเมื่อเพิ่มเดือน ... (และในระดับที่น้อยกว่าปี)


คำตอบที่ยอมรับเพียงแค่ให้คำตอบสำหรับ 15000+ วันซึ่งคำตอบนี้จะให้คำตอบเมื่อคุณเพิ่ม 25000+ วันเช่นกัน
Pradeep Kumar Prabaharan

นอกจากนี้คุณยังสามารถสอบถามได้จาก DateTimeImmutable () และคุณจะได้รับสำเนาที่แก้ไขโดยไม่มีความเสี่ยงในการเปลี่ยนแปลงต้นฉบับ
Xavi Montero

17

นี่เป็นตัวอย่างเล็ก ๆ เพื่อแสดงการปรับเปลี่ยนวันที่:

$date = date("Y-m-d");
//increment 2 days
$mod_date = strtotime($date."+ 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//decrement 2 days
$mod_date = strtotime($date."- 2 days");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 month
$mod_date = strtotime($date."+ 1 months");
echo date("Y-m-d",$mod_date) . "\n";

//increment 1 year
$mod_date = strtotime($date."+ 1 years");
echo date("Y-m-d",$mod_date) . "\n";

คุณช่วยกรุณาดูที่เกี่ยวข้องของฉัน (quesiton) [ stackoverflow.com/q/61421783/8919244] ?
Faisal

8

คุณยังสามารถใช้รูปแบบต่อไปนี้

strtotime("-3 days", time());
strtotime("+1 day", strtotime($date));

คุณสามารถกองซ้อนการเปลี่ยนแปลงด้วยวิธีนี้:

strtotime("+1 day", strtotime("+1 year", strtotime($date)));

หมายเหตุ: ความแตกต่างระหว่างวิธีการนี้และเป็นหนึ่งในคำตอบอื่น ๆ : แทนการเชื่อมโยงค่า+1 dayและคุณก็สามารถผ่านในการประทับเวลาเป็นพารามิเตอร์ที่สองของ<timestamp>strtotime


5

การใช้ตัวแปรสำหรับจำนวนวัน

$myDate = "2014-01-16";
$nDays = 16;
$newDate = strtotime($myDate . '+ '.$nDays.'days');
echo newDate('d/m/Y', $soma); //format new date 

5

นี่คือทางออกที่ง่ายที่สุดในการค้นหาของคุณ

$date=date_create("2013-03-15"); // or your date string
date_add($date,date_interval_create_from_date_string("40 days"));// add number of days 
echo date_format($date,"Y-m-d"); //set date format of the result


0

ทุกคนต้องใช้รหัสร้อง:

$nday = time() + ( 24 * 60 * 60);    
echo 'Now:       '. date('Y-m-d') ."\n";    
echo 'Next Day: '. date('Y-m-d', $nday) ."\n";

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