PHP รับวันพรุ่งนี้จากวันที่


89

ฉันมีวัน PHP ในรูปแบบของและฉันต้องการที่จะได้รับวันพรุ่งนี้ในรูปแบบเดียวกันดังนั้นสำหรับตัวอย่างเช่น2013-01-222013-01-23

เป็นไปได้อย่างไรกับ PHP?

คำตอบ:


211

ใช้DateTime

$datetime = new DateTime('tomorrow');
echo $datetime->format('Y-m-d H:i:s');

หรือ:

$datetime = new DateTime('2013-01-22');
$datetime->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');

หรือ:

$datetime = new DateTime('2013-01-22');
$datetime->add(new DateInterval("P1D"));
echo $datetime->format('Y-m-d H:i:s');

หรือใน PHP 5.4+:

echo (new DateTime('2013-01-22'))->add(new DateInterval("P1D"))
                                 ->format('Y-m-d H:i:s');

1
สิ่งนี้ใช้กระแสฉันต้องผ่านในวันที่กำหนด
Justin

74
 $tomorrow = date("Y-m-d", strtotime('tomorrow'));

หรือ

  $tomorrow = date("Y-m-d", strtotime("+1 day"));

ลิงค์ช่วยเหลือ: STRTOTIME ()


1
ฉันใช้คำตอบนี้และทุกคำตอบเป็นเวอร์ชันที่สั้นและง่ายที่สุดขอบคุณ!
Bombelman

17

เนื่องจากคุณติดแท็กสิ่งนี้ด้วย คุณสามารถใช้กับ+1 dayตัวปรับแต่งดังนี้:

$tomorrow_timestamp = strtotime('+1 day', strtotime('2013-01-22'));

ที่กล่าวว่ามันเป็นทางออกที่ดีกว่าที่จะใช้วันที่และเวลา


14
<? php 

//1 Day = 24*60*60 = 86400

echo date("d-m-Y", time()+86400); 

?>

17
โปรดทราบว่าสิ่งนี้จะล้มเหลวในกรณีขอบ (เวลาออมแสง)
JJJ

คำตอบนี้ผิด ฉันมี cronjob ใช้สิ่งนี้ในวงและระบบก็ตาย
jewelnguyen8


3

ใช้DateTime:

เพื่อรับพรุ่งนี้ต่อจากนี้:

$d = new DateTime('+1day');
$tomorrow = $d->format('d/m/Y h.i.s');
echo $tomorrow;

ผลลัพธ์: 28/06/2017 08.13.20

เพื่อรับวันพรุ่งนี้จากวันที่:

$d = new DateTime('2017/06/10 08.16.35 +1day')
$tomorrow = $d->format('d/m/Y h.i.s');
echo $tomorrow;

ผลลัพธ์: 11/06/2560 08.16.35

หวังว่าจะช่วยได้!


1
/**
 * get tomorrow's date in the format requested, default to Y-m-d for MySQL (e.g. 2013-01-04)
 *
 * @param string
 *
 * @return string
 */
public static function getTomorrowsDate($format = 'Y-m-d')
{
    $date = new DateTime();
    $date->add(DateInterval::createFromDateString('tomorrow'));

    return $date->format($format);
}

1

แปลกดูเหมือนว่ามันจะทำงานได้ดีอย่างสมบูรณ์แบบ: date_create( '2016-02-01 + 1 day' );

echo date_create( $your_date . ' + 1 day' )->format( 'Y-m-d' );

ควรทำ


0

ประการแรกการหานามธรรมที่ถูกต้องเป็นกุญแจสำคัญเสมอ กุญแจสำคัญในการอ่านการบำรุงรักษาและความสามารถในการขยาย

ที่นี่ผู้สมัครที่ค่อนข้างชัดเจนคือISO8601DateTimeไฟล์. มีการใช้งานอย่างน้อยสองรายการ: อันแรกคือวันที่และเวลาที่แยกวิเคราะห์จากสตริงและอันที่สองคือวันพรุ่งนี้ ดังนั้นจึงมีสองคลาสที่สามารถใช้ได้และการรวมกันของพวกเขาทำให้ได้ผลลัพธ์ที่ต้องการ (เกือบ):

new Tomorrow(new FromISO8601('2013-01-22'));

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

new Date(
    new Tomorrow(
        new FromISO8601('2013-01-22')
    )
);

เนื่องจากคุณต้องการการแสดงข้อความไม่ใช่แค่วัตถุคุณจึงเรียกใช้value()เมธอด

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแนวทางนี้โปรดดูที่โพสต์นี้นี้


-1

นี่คือฟังก์ชั่นการทำงาน

function plus_one_day($date){
 $date2 = formatDate4db($date);
 $date1 = str_replace('-', '/', $date2);
 $tomorrow = date('Y-m-d',strtotime($date1 . "+1 days"));
 return $tomorrow; }

ฟังก์ชัน formatDate4db ทำอะไร เหตุใดจึงแทนที่เครื่องหมายขีดกลางด้วยเครื่องหมายทับในสตริง
braindigitalis

ฟังก์ชัน formatDate4db ผ่านวันที่และสร้างรูปแบบเช่นรูปแบบฐานข้อมูล mysql และฟังก์ชัน str_replace ฉันมีรูปแบบวันที่ 2019/12/10 และแทนที่ด้วย -
Muhammad Awais Zulifqar

-4
$date = '2013-01-22';
$time = strtotime($date) + 86400;
echo date('Y-m-d', $time);

โดยที่ 86400 คือ # วินาทีในหนึ่งวัน


11
ไม่วันหนึ่งไม่ได้มี 86400 วินาทีเสมอไป
nickb

ฉันไม่ได้รับปัญหา กรุณาอธิบาย @nickb
Aiyion Prime

@ Aiyion วันสำคัญที่ทำให้การเปลี่ยนไปเป็นหรือจากเวลาออมแสงไม่มี 86400 วินาที
dumazy

ฉันคิดว่า DST เริ่มต้นในเวลาสองนาฬิกาดังนั้นจึงไม่ควรส่งผลให้เป็นวันที่อื่น?
Aiyion Prime

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