Thêm ngày vào $ Date trong PHP


215

Tôi có một ngày được trả về như một phần của truy vấn myQuery trong biểu mẫu 2010-09-17

Tôi muốn đặt các biến $ Date2 thành $ Date5 như sau:

$Date2 = $Date + 1

$Date3 = $Date + 2

Vân vân..

để nó trở lại 2010-09-18, 2010-09-19v.v ...

Tôi đã thử

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

nhưng điều này cho tôi ngày TRƯỚC $Date.

Cách chính xác để có được Ngày của tôi ở dạng định dạng 'Ymd' để chúng có thể được sử dụng trong truy vấn khác?


Câu trả lời:


446

Tất cả bạn phải làm là sử dụng daysthay vì daynhư thế này:

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

Và nó xuất ra chính xác:

2010-09-18
2010-09-19

7
Nó cũng xuất ra chính xác bằng cách sử dụng 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

Chỉ cần thử nó theo cách này và nó đã làm việc. Tôi vẫn không biết tại sao tôi nhận được một giá trị một ngày trước ngày bắt đầu khi tôi thử nó lần đầu tiên.
Istari

Điều gì xảy ra nếu tôi có một biến số cho số ngày cần thêm?
Carlos Martins

3
Ngày lặp lại @Carlos ("Ymd", strtotime ($ Ngày. '+'. $ Biến. 'Days'));
Pradeep Kumar Mitchaharan

Không, phương pháp này hoàn toàn không hoạt động. Nó sẽ trở lại vào một ngày nào đó năm 2004.
gegobyte

81

Nếu bạn đang sử dụng PHP 5.3, bạn có thể sử dụng một DateTimeđối tượng và addphương thức của nó :

$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');

Hãy xem trang hướng dẫn của nhà DateIntervalxây dựng để xem cách xây dựng các giai đoạn khác để thêm vào ngày của bạn (2 ngày sẽ là 'P2D'3 'P3D', v.v.).

Nếu không có PHP 5.3, bạn sẽ có thể sử dụng strtotimecách bạn đã làm (Tôi đã thử nghiệm nó và nó hoạt động trong cả 5.1.6 và 5.2.10):

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

Xin lỗi Daniel, nhưng máy chủ web chạy php 5.2.6, vì vậy điều này sẽ không hoạt động
Istari

2
DateTime::constructsử dụng cơ chế tương tự như strtotimephân tích ngày, vì vậy bạn cũng có thể làm điều new DateTime("+1 day $date")đó không yêu cầu 5.3
Gordon

Tôi không có ý định hạ thấp điều này, nhưng bằng cách nào đó tôi đã làm = /
Steven

Đây là câu trả lời thực tế cho php 5.5+
TheLegendaryCopyCoder

29

Từ PHP 5.2 trở đi, bạn có thể sử dụng sửa đổi với đối tượng 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');

Hãy cẩn thận khi thêm tháng ... (và ở mức độ thấp hơn, năm)


câu trả lời được chấp nhận chỉ đưa ra câu trả lời trong hơn 15000 ngày trong đó câu trả lời này cho câu trả lời khi bạn thêm 25000 ngày nữa ..
Pradeep Kumar341aharan

Bạn cũng có thể truy vấn điều này trên DateTimeImmutable () và bạn nhận được một bản sao đã sửa đổi mà không có nguy cơ thay đổi bản gốc.
Xavi Montero

17

Đây là một đoạn nhỏ để trình bày các sửa đổi ngày:

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

bạn có thể vui lòng xem liên quan của tôi (quesiton) [ stackoverflow.com/q/61421783/8919244] không?
Faisal

8

Bạn cũng có thể sử dụng định dạng sau

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

Bạn có thể xếp chồng thay đổi theo cách này:

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

Lưu ý sự khác biệt giữa cách tiếp cận này và cách tiếp cận trong các câu trả lời khác: thay vì nối các giá trị +1 day<timestamp>, bạn chỉ có thể chuyển vào dấu thời gian làm tham số thứ hai của strtotime.


5

Sử dụng biến cho Số ngày

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

5

Đây là giải pháp đơn giản nhất cho truy vấn của bạn

$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

2

Ở đây có một cách dễ dàng để giải quyết điều này.

<?php
   $date = "2015-11-17";
   echo date('Y-m-d', strtotime($date. ' + 5 days'));
?>

Đầu ra sẽ là:

2015-11-22

Giải pháp đã được tìm thấy từ đây - Cách thêm ngày vào ngày trong PHP


0

Tất cả phải sử dụng mã dưới đây:

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

1
Bạn không nên làm theo cách này, cuối cùng bạn sẽ có vấn đề với giây nhuận
Nathan
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.