เพิ่มจำนวนวันในวันที่


124

ฉันต้องการเพิ่มจำนวนวันในวันที่ปัจจุบัน: ฉันใช้รหัสต่อไปนี้:

$i=30;
echo $date = strtotime(date("Y-m-d", strtotime($date)) . " +".$i."days");

แต่แทนที่จะได้วันที่ที่เหมาะสมฉันได้รับสิ่งนี้: 2592000

ช่วยแนะนำหน่อยครับ.




4
ค้นหาโดยใช้ชื่อแท็กที่มีวงเล็บรอบตัวเช่น[php] [date] addในช่องค้นหา คุณจะพบคำตอบมากมายสำหรับคำถามเช่นนี้
Mikel

คำตอบ:


247

สิ่งนี้ควรจะเป็น

echo date('Y-m-d', strtotime("+30 days"));

strtotime

คาดว่าจะได้รับสตริงที่มีรูปแบบวันที่เป็นภาษาอังกฤษแบบสหรัฐอเมริกาและจะพยายามแยกวิเคราะห์รูปแบบนั้นเป็นการประทับเวลา Unix (จำนวนวินาทีนับตั้งแต่วันที่ 1 มกราคม 1970 00:00:00 UTC) โดยเทียบกับการประทับเวลาที่ระบุในตอนนี้หรือ เวลาปัจจุบันหากไม่ได้ให้มาตอนนี้

ในขณะที่ date

ส่งคืนสตริงที่จัดรูปแบบตามสตริงรูปแบบที่กำหนดโดยใช้การประทับเวลาจำนวนเต็มที่กำหนดหรือเวลาปัจจุบันหากไม่มีการระบุเวลา

ดูหน้าคู่มือสำหรับ

และลายเซ็นของฟังก์ชัน


ฉันคิดว่าสิ่งนี้จะทำให้เกิดปัญหาเมื่อข้ามเวลาออมแสงและรายการปฏิทินตลกอื่น ๆ การเรียงลำดับขึ้นอยู่กับบริบท คุณต้องคิดว่าหากคุณกำลังมองหาช่วงเวลา 24 ชั่วโมง 30 ช่วงตึกซึ่งเมื่อข้ามวันเวลาออมแสงอาจทำให้คุณอยู่ที่ 23.00 น.
JJ Rohrer

1
@JJRohrer ไม่มันจะไม่ strtotimeจะนำ DST ใด ๆ สำหรับเขตเวลาที่กำหนดค่าไว้มาพิจารณา DST เป็นปัญหาเฉพาะเมื่อคุณทำบางอย่างเช่น OP นี้: stackoverflow.com/questions/4066035
Gordon

จุดที่ถ่าย ฉันมาถึงคำถามนี้โดยพยายามแก้ไขบางอย่างที่ใกล้เคียงกับคำถามที่คุณอ้างถึง ฉันหวังว่าความคิดเห็นข้างต้นของฉันจะช่วยให้คนอื่นคิดเกี่ยวกับการคำนวณวันที่ของพวกเขาอย่างจริงจัง - มันง่ายที่จะลืมเกี่ยวกับข้อยกเว้นทั้งหมด
JJ Rohrer

64

อันนี้อาจจะดี

function addDayswithdate($date,$days){

    $date = strtotime("+".$days." days", strtotime($date));
    return  date("Y-m-d", $date);

}

4
โซลูชันด้านบนสามารถบีบอัดเป็นบรรทัดเดียวได้เช่นกันหากคุณต้องการโซลูชันที่รวดเร็วและไม่ต้องการสร้างฟังก์ชัน echo date ("Ymd", strtotime ("+ 12days", strtotime (20130101)))
Mayank Jaiswal

46
$date = new DateTime();
$date->modify('+1 week');
print $date->format('Y-m-d H:i:s');

หรือ print date('Y-m-d H:i:s', mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 7, date("Y"));


วิธีนี้เน้นการข้ามเวลาออมแสง ฉันไม่แน่ใจว่า php ใช้เวลาอื่น ๆ เช่นอธิกวินาทีหรือไม่ แต่ขึ้นอยู่กับความต้องการของคุณคุณน่าจะดีกว่าถ้าใช้ DateTime เทียบกับ StrToTime หากคุณจัดการกับวันตามปฏิทิน
JJ Rohrer

@chx โซลูชันนี้ยังช่วยให้สามารถระบุวันที่ได้อย่างรอบคอบ เช่น DateTime ใหม่ ('2016-12-09 10:35:58'); ที่มาจากการประทับเวลาฐานข้อมูล ...
mshaffer


10

คุณสามารถเพิ่มสิ่งนี้ได้เช่นกันหากคุณต้องการวันที่ 5 วันจากวันที่ระบุ:

คุณมีตัวแปรที่มีวันที่เช่นนี้ (ได้รับจากอินพุตหรือฐานข้อมูลหรือฮาร์ดโค้ด):

$today = "2015-06-15"; // Or can put $today = date ("Y-m-d");

$fiveDays = date ("Y-m-d", strtotime ($today ."+5 days"));

echo $fiveDays; // Will output 2015-06-20

7

โปรดทราบว่าการเปลี่ยนนาฬิกาที่เปลี่ยนไปเนื่องจากเวลาออมแสงอาจทำให้คุณมีปัญหาในการคำนวณเฉพาะวัน

นี่คือฟังก์ชั่น php เล็ก ๆ ที่ดูแล:

function add_days($date, $days) {
    $timeStamp = strtotime(date('Y-m-d',$date));
    $timeStamp+= 24 * 60 * 60 * $days;

    // ...clock change....
    if (date("I",$timeStamp) != date("I",$date)) {
        if (date("I",$date)=="1") { 
            // summer to winter, add an hour
            $timeStamp+= 60 * 60; 
        } else {
            // summer to winter, deduct an hour
            $timeStamp-= 60 * 60;           
        } // if
    } // if
    $cur_dat = mktime(0, 0, 0, 
                      date("n", $timeStamp), 
                      date("j", $timeStamp), 
                      date("Y", $timeStamp)
                     ); 
    return $cur_dat;
}


6

คุณสามารถทำมันโดยการจัดการ timecode หรือโดยการใช้strtotime () นี่คือตัวอย่างการใช้ strtotime

$ data ['created'] = date ('Ymd H: i: s', strtotime ("+ 1 สัปดาห์"));



6

ฉันรู้ว่านี่เป็นคำถามเก่า แต่สำหรับ PHP <5.3 คุณสามารถลองสิ่งนี้:

$date = '05/07/2013';
$add_days = 7;
$date = date('Y-m-d',strtotime($date) + (24*3600*$add_days)); //my preferred method
//or
$date = date('Y-m-d',strtotime($date.' +'.$add_days.' days');

5

คุณสามารถใช้คลาส DateTime ที่สร้างขึ้นใน PHP มีวิธีการที่เรียกว่า "เพิ่ม" และวิธีการใช้งานได้แสดงไว้อย่างละเอียดในคู่มือ: http://www.php.net/manual/en/datetime.add.php

อย่างไรก็ตามต้องใช้ PHP 5.3.0




3

ง่ายและดีที่สุด

echo date('Y-m-d H:i:s')."\n";
echo "<br>";
echo date('Y-m-d H:i:s', mktime(date('H'),date('i'),date('s'), date('m'),date('d')+30,date('Y')))."\n";

ลองทำตามนี้



2

ใช้ฟังก์ชัน addDate () นี้เพื่อเพิ่มหรือลบวันเดือนหรือปี (คุณจะต้องใช้ฟังก์ชันช่วยฟอร์แมตวันที่ () ด้วย)

/**
 * $date self explanatory
 * $diff the difference to add or subtract: e.g. '2 days' or '-1 month'
 * $format the format for $date
 **/
    function addDate($date = '', $diff = '', $format = "d/m/Y") {
        if (empty($date) || empty($diff))
            return false;
        $formatedDate = reformatDate($date, $format, $to_format = 'Y-m-d H:i:s');
        $newdate = strtotime($diff, strtotime($formatedDate));
        return date($format, $newdate);
    }
    //Aux function
    function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
        $date_aux = date_create_from_format($from_format, $date);
        return date_format($date_aux,$to_format);
    }

หมายเหตุ: สำหรับ php> = 5.3 เท่านั้น



1
//Set time zone
date_default_timezone_set("asia/kolkata");
$pastdate='2016-07-20';
$addYear=1;
$addMonth=3;
$addWeek=2;
$addDays=5;
$newdate=date('Y-m-d', strtotime($pastdate.' +'.$addYear.' years +'.$addMonth. ' months +'.$addWeek.' weeks +'.$addDays.' days'));
echo $newdate;

1

แม้ว่านี่จะเป็นคำถามเก่า แต่วิธีการทำเช่นนี้อาจต้องใช้หลายสถานการณ์และดูเหมือนว่าจะมีประสิทธิภาพ คุณต้องมี PHP 5.3.0 ขึ้นไป

$EndDateTime = DateTime::createFromFormat('d/m/Y', "16/07/2017");
$EndDateTime->modify('+6 days');
echo $EndDateTime->format('d/m/Y');

คุณสามารถมีรูปแบบประเภทใดก็ได้สำหรับสตริงวันที่และวิธีนี้จะได้ผล

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