PHP, Nhận ngày mai kể từ ngày


88

Tôi có một ngày trong PHP ở dạng 2013-01-22và tôi muốn lấy ngày mai ở cùng một định dạng, chẳng hạn 2013-01-23.

Làm thế nào điều này có thể thực hiện được với PHP?

Câu trả lời:


201

Sử dụng DateTime

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

Hoặc là:

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

Hoặc là:

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

Hoặc trong PHP 5.4+:

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

1
Điều này sử dụng hiện tại, tôi cần phải vượt qua trong một ngày nhất định.
Justin

Cách thứ 2 có lẽ là tốt nhất.
nickb 22/01/13

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

hoặc là

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

Liên kết trợ giúp: STRTOTIME ()


1
Tôi đã sử dụng cái này và trong số tất cả các câu trả lời là phiên bản ngắn nhất và đơn giản nhất, cảm ơn!
Bombelman

17

Vì bạn đã gắn thẻ cái này với , bạn có thể sử dụng nó với công cụ +1 daysửa đổi như sau:

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

Điều đó nói rằng, đó là một giải pháp tốt hơn nhiều để sử dụng DateTime .


14
<? php 

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

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

?>

17
Lưu ý rằng điều này sẽ không thành công trong các trường hợp cạnh (thời gian tiết kiệm ánh sáng ban ngày).
JJJ

Câu trả lời này là sai. Tôi có một cronjob sử dụng điều này trong một vòng lặp, và hệ thống đã chết.
gemnguyen8 7/11/19


3

Sử dụng DateTime:

Để có được ngày mai từ bây giờ:

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

Kết quả: 28/06/2017 08.13.20

Để có được ngày mai từ một ngày:

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

Kết quả: 11/06/2017 08.16.35

Hy vọng nó giúp!


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

Thật kỳ lạ, có vẻ như nó hoạt động hoàn toàn tốt: date_create( '2016-02-01 + 1 day' );

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

Hãy làm nó


0

Đầu tiên, việc đưa ra những tóm tắt chính xác luôn là chìa khóa. chìa khóa cho khả năng đọc, khả năng bảo trì và khả năng mở rộng.

Ở đây, ứng cử viên khá rõ ràng là một ISO8601DateTime. Có ít nhất hai cách triển khai: lần đầu tiên là ngày giờ được phân tích cú pháp từ một chuỗi và lần triển khai thứ hai là ngày mai. Do đó, có hai lớp có thể được sử dụng và sự kết hợp của chúng dẫn đến (gần như) kết quả mong muốn:

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

Cả hai đối tượng đều là ngày giờ ISO8601, vì vậy biểu diễn văn bản của chúng không phải là chính xác những gì bạn cần. Vì vậy, bước cuối cùng là làm cho chúng có dạng ngày tháng:

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

Vì bạn cần một biểu diễn dạng văn bản, không chỉ một đối tượng, bạn gọi một value()phương thức.

Để biết thêm về cách tiếp cận này, hãy xem bài đăng này .


-1

đây là chức năng làm việc

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

chức năng formatDate4db làm gì? Tại sao lại thay thế dấu gạch ngang bằng dấu gạch chéo trong chuỗi?
braindigitalis

formatDate4db chức năng vượt qua ngày và nó tạo ra một định dạng như định dạng cơ sở dữ liệu mysql, và chức năng str_replace, tôi có ngày định dạng 2019/12/10 và thay thế bằng -
Muhammad Awais Zulifqar

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

Trong đó 86400 là # giây trong một ngày.


11
Không, một ngày không phải lúc nào cũng có 86400 giây.
nickb 22/01/13

Tôi không hiểu vấn đề. Vui lòng giải thích @nickb
Aiyion.Prime

@ Ngày Aiyion.Prime mà làm cho chuyển sang hoặc từ tiết kiệm thời gian ban ngày không có 86400 giây
dumazy

Tôi nghĩ về điều đó, DST được bắt đầu vào lúc hai giờ và do đó sẽ không bao giờ dẫn đến một ngày khác?
Aiyion.Prime

Vấn đề không phải là tiết kiệm ánh sáng ban ngày. Thời gian trong cơ sở dữ liệu thực sự nên được lưu trữ dưới dạng UTC không có thời gian tiết kiệm ánh sáng ban ngày. Nếu bạn đang lưu trữ ngày của mình ở UTC, điều này sẽ hoạt động tốt nhưng hơi bất tiện.
braindigitalis
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.