thêm 1 ngày vào giá trị định dạng DATETIME


87

Trong một số tình huống nhất định, tôi muốn thêm 1 ngày vào giá trị của biến có định dạng DATETIME của mình:

$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));

Cách tốt nhất để làm việc này là gì?

Câu trả lời:


63

Nếu bạn muốn làm điều này trong PHP:

// replace time() with the time stamp you want to add one day to
$startDate = time();
date('Y-m-d H:i:s', strtotime('+1 day', $startDate));

Nếu bạn muốn thêm ngày trong MySQL:

-- replace CURRENT_DATE with the date you want to add one day to
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY);

điều này sẽ không cho tôi thời gian hiện tại? tôi vẫn cần duy trì thời gian nhập của người dùng.
ian

Có, nó sẽ nhưng tôi đã đánh dấu cho bạn những giá trị nào bạn nên thay đổi cho thời gian tùy chỉnh. Bạn chỉ có thể thay thế time()bằng strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}").
RaYell

đây không phải là tiết kiệm mùa hè / mùa đông! Vui lòng sử dụng thao tác lưu ngày / giờ DST
steven

208

Còn một cách nữa để thực hiện việc này với DateTime đã được giới thiệu trong PHP 5.2. Không giống như việc sử dụng strtotime()này sẽ tính đến thời gian tiết kiệm ánh sáng ban ngày và năm nhuận.

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

// Available in PHP 5.3

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

// Available in PHP 5.4

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

// Available in PHP 5.5

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

Ah, một vòng lặp da loop .
Funk Forty Niner

9
Nếu thêm nhiều hơn một ngày, bạn có thể sử dụng số nhiều hoặc số ít và nhận được cùng một kết quả, ví dụ: +2 dayhoặc +2 days(rõ ràng +2 dayslà đúng hơn về mặt ngữ nghĩa)
timhc22

Sự khác biệt thực tế giữa các phương pháp này là gì? Ví dụ đầu tiên có vẻ đơn giản nhất và có ngữ nghĩa nhất đối với tôi.
BadHorsie 13/02/17

24

Hàm tạo DateTime nhận một tham số string time. $timecó thể là những thứ khác nhau, nó phải tôn trọng định dạng ngày giờ .

Có một số giá trị hợp lệ làm ví dụ:

  • 'now' (giá trị mặc định)
  • 2017-10-19
  • 2017-10-19 11:59:59
  • 2017-10-19 +1day

Vì vậy, trong trường hợp của bạn, bạn có thể sử dụng như sau.

$dt = new \DateTime('now +1 day'); //Tomorrow
$dt = new \DateTime('2016-01-01 +1 day'); //2016-01-02

3
Trả lời mà không giải thích? Đọc Làm thế nào để viết một câu trả lời tốt?
Shashanth

10
  1. Sử dụng strtotimeđể chuyển đổi chuỗi thành dấu thời gian
  2. Thêm một ngày vào đó (ví dụ: bằng cách thêm 86400 giây (24 * 60 * 60))

ví dụ:

$time = strtotime($myInput);
$newTime = $time + 86400;

Nếu chỉ thêm 1 ngày, thì việc sử dụng lại strtotime có lẽ là quá mức cần thiết.


Vì vậy, tôi cần chuyển đổi nó thành TIMESTAMP sau đó quay lại định dạng DATETIME?
ian

4
Tôi đoán cũng cần lưu ý rằng không phải ngày nào cũng dài 24 giờ. Ở hầu hết các nơi trên thế giới, tiết kiệm ánh sáng ban ngày (giờ mùa hè) có nghĩa là một ngày trong năm chỉ có 23 giờ và một ngày khác là 25 giờ.
nickf

Tăng. Bạn chuyển đổi ngày giờ thành dấu thời gian, vì vậy nó dựa trên UTC. Và ngày UTC luôn dài 24 giờ. Khi chuyển đổi ngược lại với date()múi giờ địa phương, múi giờ này sẽ quan tâm đến việc tiết kiệm ánh sáng ban ngày.
rabudde

5

Bạn có thể dùng

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


1

Bạn có thể sử dụng như sau.

$start_date = date('Y-m-d H:i:s');
$end_date = date("Y-m-d 23:59:59", strtotime('+3 days', strtotime($start_date)));

Bạn cũng có thể đặt ngày là không đổi và sử dụng như bên dưới.

if (!defined('ADD_DAYS')) define('ADD_DAYS','+3 days');
$end_date = date("Y-m-d 23:59:59", strtotime(ADD_DAYS, strtotime($start_date)));

0

Sử dụng thời gian yêu cầu của máy chủ để Thêm ngày. Làm việc như mong đợi.

25/08/19 => 27/09/19

$timestamp = $_SERVER['REQUEST_TIME'];
$dateNow = date('d/m/y', $timestamp);
$newDate = date('d/m/y', strtotime('+2 day', $timestamp));

Tại đây '+2 ngày' để thêm bất kỳ số ngày nào.


0

Có một cách ngắn gọn và trực quan hơn để thêm ngày vào php date. Đừng hiểu sai ý tôi, những biểu thức php đó rất tuyệt, nhưng bạn luôn phải google cách xử lý chúng. Tôi bỏ lỡ cơ sở tự động hoàn thành cho điều đó.

Đây là cách tôi muốn xử lý những trường hợp đó:

(new Future(
    new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'),
    new OneDay()
))
    ->value();

Đối với tôi, đó là cách trực quan hơn và tính năng tự động hoàn thành hoạt động hiệu quả. Không cần phải google cho các giải pháp mỗi lần.

Như một phần thưởng tuyệt vời, bạn không phải lo lắng về việc định dạng giá trị kết quả, nó đã là định dạng ISO8601.

Đây là thư viện meringue, có nhiều ví dụ hơn ở đây .

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.