Thêm số ngày vào một ngày


124

Tôi muốn thêm số ngày vào ngày hiện tại: Tôi đang sử dụng mã sau đây:

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

Nhưng thay vì nhận được ngày thích hợp, tôi nhận được điều này: 2592000

Xin đề nghị.




4
tìm kiếm bằng cách sử dụng tên thẻ với dấu ngoặc quanh chúng, ví dụ [php] [date] addtrong hộp tìm kiếm. Bạn sẽ tìm thấy nhiều câu trả lời cho các câu hỏi như thế này.
Mikel

Câu trả lời:


247

Điều này nên

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

strtotime

dự kiến ​​sẽ được cung cấp một chuỗi chứa định dạng ngày tiếng Anh Mỹ và sẽ cố phân tích định dạng đó thành dấu thời gian Unix (số giây kể từ ngày 1 tháng 1 năm 1970 00:00:00 UTC), liên quan đến dấu thời gian được đưa ra hiện tại hoặc thời gian hiện tại nếu bây giờ không được cung cấp.

trong khi date

Trả về một chuỗi được định dạng theo chuỗi định dạng đã cho bằng cách sử dụng dấu thời gian nguyên đã cho hoặc thời gian hiện tại nếu không có dấu thời gian nào được đưa ra.

Xem các trang hướng dẫn cho

và chữ ký chức năng của họ.


Tôi nghĩ rằng điều này sẽ gây ra vấn đề khi vượt qua thời gian tiết kiệm ánh sáng ban ngày và các mục lịch vui nhộn khác. Nó sắp xếp tùy thuộc vào bối cảnh. Bạn cần suy nghĩ về việc nếu bạn đang tìm kiếm 30 khối 24 giờ, mà khi vượt qua một ngày tiết kiệm ánh sáng ban ngày, có thể đưa bạn vào lúc 11:00 PM.
JJ Rohrer

1
@JJRohrer không, nó sẽ không. strtotimesẽ đưa bất kỳ DST nào cho múi giờ được cấu hình vào tài khoản. DST chỉ là một vấn đề khi bạn làm điều gì đó như OP này: stackoverflow.com/questions/4066035
Gordon

Điểm lấy. Tôi đến Câu hỏi này để cố gắng giải quyết một cái gì đó gần hơn với câu hỏi mà bạn tham khảo. Tôi hy vọng nhận xét trên của tôi với việc khiến người khác suy nghĩ về việc tính toán ngày tháng của họ một cách nghiêm túc - thật dễ dàng để quên đi tất cả các ngoại lệ.
JJ Rohrer

64

Điều này có thể là tốt

function addDayswithdate($date,$days){

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

}

4
Giải pháp trên có thể được nén trong một dòng cũng như nếu bạn cần một giải pháp nhanh chóng và không muốn tạo một chức năng. ngày echo ("Ymd", strtotime ("+ 12 ngày", strtotime (20130101)))
Mayank Jaiswal

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

hoặc là print date('Y-m-d H:i:s', mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 7, date("Y"));


Phương pháp này giải quyết vượt qua thời gian tiết kiệm ánh sáng ban ngày. Tôi không chắc liệu tài khoản php cho các quirks thời gian khác, như giây nhuận, nhưng, tùy thuộc vào nhu cầu của bạn, có lẽ bạn nên sử dụng DateTime so với StrToTime nếu bạn xử lý các ngày theo lịch.
JJ Rohrer

@chx Giải pháp này cũng cẩn thận hơn cho phép một ngày; ví dụ: DateTime mới ('2016-12-09 10:35:58'); đang đến từ dấu thời gian cơ sở dữ liệu ...
mshaffer


10

Bạn cũng có thể thêm như thế này, nếu bạn muốn ngày 5 ngày kể từ ngày cụ thể:

Bạn có một biến có ngày như thế này (nhận được từ đầu vào hoặc DB hoặc chỉ được mã hóa cứng):

$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

Hãy nhớ rằng, sự thay đổi của đồng hồ thay đổi vì thời gian tiết kiệm ánh sáng ban ngày có thể cung cấp cho bạn một số vấn đề khi chỉ tính ngày.

Đây là một hàm php nhỏ đảm nhận việc đó:

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

Bạn có thể làm điều đó bằng cách thao tác mã thời gian hoặc bằng cách sử dụng strtotime () . Đây là một ví dụ sử dụng strtotime.

$ data ['created'] = date ('Ymd H: i: s', strtotime ("+ 1 tuần"));


6

Bạn có thể sử dụng strtotime ()
$data['created'] = date('Y-m-d H:m:s', strtotime('+1 week'));


6

Tôi biết đây là một câu hỏi cũ, nhưng đối với PHP <5.3 bạn có thể thử điều này:

$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

Bạn có thể sử dụng lớp DateTime được xây dựng trong PHP. Nó có một phương thức gọi là "add" và cách sử dụng nó được thể hiện triệt để trong hướng dẫn sử dụng: http://www.php.net/manual/en/datetime.add.php

Tuy nhiên, nó đòi hỏi PHP 5.3.0.


5
$date = "04/28/2013 07:30:00";

$dates = explode(" ",$date);

$date = strtotime($dates[0]);

$date = strtotime("+6 days", $date);

echo date('m/d/Y', $date)." ".$dates[1];

4

Bạn có thể thử điều này.

$i=30;
echo  date("Y-m-d",mktime(0,0,0,date('m'),date('d')+$i,date('Y')));

3

Đơn giản và tốt nhất

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

Thử cái này


3
//add the two day

$date = "**2-4-2016**"; //stored into date to variable

echo date("d-m-Y",strtotime($date.**' +2 days'**));

//print output
**4-4-2016**

2

Sử dụng hàm addDate () này để thêm hoặc bớt ngày, tháng hoặc năm (bạn cũng sẽ cần hàm phụ trợ làatatateateate).

/**
 * $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);
    }

Lưu ý: chỉ dành cho 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

Mặc dù đây là một câu hỏi cũ, cách làm này sẽ có nhiều tình huống và dường như rất mạnh mẽ. Bạn cần có PHP 5.3.0 trở lên.

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

Bạn có thể có bất kỳ loại định dạng nào cho chuỗi ngày và điều này sẽ hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.