2013-07-31 35 views
9

biểu mẫu của tôi có 2 lĩnh vực - Time_from và Time_toDateTime thêm 1 ngày

Bây giờ tôi cần phải thêm một mục trong cơ sở dữ liệu của tôi cho mỗi ngày (Nếu theres một sự khác biệt giữa những ngày đó) cũ. Time_from = 2013/08/26 08:00:00 và Time_to = 2013/08/28 16:00:00 Vì vậy, trong cơ sở dữ liệu của tôi sẽ nhận được 3 mục

Time_from = 2013-08-26 08:00:00 and Time_to = 2013-08-26 16:00:00 
Time_from = 2013-08-27 08:00:00 and Time_to = 2013-08-27 16:00:00 
Time_from = 2013-08-28 08:00:00 and Time_to = 2013-08-28 16:00:00 

Vì vậy, cho mục đích mà tôi đã thực hiện một phương pháp, nơi tôi lần đầu tiên tìm thấy sự khác biệt giữa những ngày 2 và sau đó tôi đang sử dụng một vòng lặp cho rằng sẽ chạy như nhiều ngày trong sự khác biệt những 2 ngày có, và ở cuối im chỉ cần thêm 1 ngày.

public function createOffer($offer) 
{ 
$time_from = new DateTime($offer->time_from); 
$time_to = new DateTime($offer->time_to); 
$interval = $time_from->diff($time_to); 

for ($counter = 0; $counter <= $interval->d; $counter++) { 
    $offer->time_from = $time_from->format('Y-m-d H:i:s'); 
    $offer_time_to = new DateTime($time_from->format('Y-m-d')); 
    $offer_time_to->setTime($time_to->format('H'), $time_to->format('i') 
     , $time_to->format('s')); 
    $offer->time_to = $offer_time_to->format('Y-m-d H:i:s'); 

    if ($offer->validate()) { 
    $offer->save(); 
    } 

    date_modify($time_from, '+1 day'); 
    } 
} 

Vì lý do nào đó, mã không hoạt động.

Khi tôi loại bỏ các lĩnh vực date_modify chỉ trong ngày đầu tiên sẽ được lưu trong cơ sở dữ liệu của tôi (Đoán cho vòng lặp chỉ được chạy khi sau đó)

Nhưng với sự date_modify trong mã của tôi, chỉ có ngày cuối cùng được lưu trong kho dữ liệu.

+0

$ interval-> d không có sự khác biệt "ngày", chỉ vài giờ, trong thời gian cho nên vòng lặp sẽ chỉ chạy một lần – Anigel

+0

Vì vậy, sự khác biệt giữa các ngày chỉ được hiển thị i giờ? – CreamYGEEK

+0

http://phpfiddle.org/main/code/3r1-6hc là bạn chắc chắn bạn không muốn $ interval-> h thay vì interval-> d – Anigel

Trả lời

21

bạn có thể sử dụng thêm chức năng của Datatime đối tượng

đây tôi đang đem lại cho bạn một ví dụ để thêm một 1 trong ngày bài viết của bạn như

<?php 
$date = new DateTime('2000-01-01'); 
$date->add(new DateInterval('P1D')); 
echo $date->format('Y-m-d') . "\n"; 
?> 

OUTPUT

2000-01-02 

Hope nó chắc chắn sẽ giúp bạn giải quyết vấn đề của bạn.

+0

Tôi vẫn nhận được kết quả tương tự, chỉ có ngày cuối cùng được lưu trong cơ sở dữ liệu . – CreamYGEEK

+0

xin vui lòng theo dõi ngày trước khi bạn vượt qua trong DateTime mới ('ngày của bạn'); và chức năng của bạn sẽ được trả lại mỗi lần ngày mới có nghĩa là 3 lần bạn cần gọi hoặc trả về giá trị từ hàm. – liyakat

+0

Giải pháp của bạn dường như hoạt động .. Rõ ràng có một vấn đề Jquery, đó là trách nhiệm cho các lỗi .. – CreamYGEEK

2
$date = new DateTime('2017-01-17'); 
$date->modify('+1 day'); 

echo $date->format('Y-m-d'); // 2017-01-18 

Bạn có thể làm điều đó quá:

$dateTo = new \DateTime('1980-12-07 +1 day'); 
echo $dateTo->format('Y-m-d'); // 1980-12-08 
Các vấn đề liên quan