2013-09-26 148 views
8

Tôi muốn thêm thời gian vào ngày hiện tại. Tôi có 2 biến chuỗi:Cách tốt nhất để thêm khoảng thời gian trong PHP là gì?

$date  = "2013-01-05 10:55:15"; 
$interval =   "50:25:10"; 

Tôi muốn tính ngày cuối cùng "2013-01-07 13:20:25". Giờ trong giờ có thể lớn hơn 23, có nghĩa là khoảng thời gian này có thể lớn hơn cả ngày.

Cách tốt nhất để làm điều này là gì?

+2

http://www.php.net/manual/en/datetime.add.php – CBroe

Trả lời

7

Sử dụng DateTime API:

$date = new DateTime("2013-01-05 10:55:15"); 
$date->add(new DateInterval("PT50H25M10S")); 

sau đó bạn có thể chuyển đổi nó trở lại chuỗi với định dạng ngày cùng bạn sẽ sử dụng với chức năng date(), nếu bạn muốn:

$string = $date->format("Y-m-d H:i:s"); 

Để biết thêm thông tin về DateInterval định nghĩa, hãy truy cập trang này:

DateInterval

Định dạng bắt đầu bằng chữ P, vì "thời gian." Mỗi khoảng thời gian được biểu thị bằng giá trị số nguyên, theo sau là dấu chấm câu . Nếu thời lượng chứa các phần tử thời gian, phần đó của đặc điểm kỹ thuật đứng trước chữ T.

Dưới đây là một số ví dụ đơn giản. Hai ngày là P2D. Hai giây là PT2S. Sáu năm và năm phút là P6YT5M.

như vậy trong trường hợp này có nghĩa là PT50H25M10S 50 giờ, 25 phút, và 10 giây

Lưu ý rằng DateInterval có sẵn chỉ từ PHP 5.3, nếu bạn phải sử dụng phiên bản thấp hơn, bạn có thể sử dụng một cái gì đó như thế này:

$time = strtotime("2013-01-05 10:55:15"); 
$time += 55*60*60 + 25*60 + 10; 
$newDate = date("Y-m-d H:i:s"); 
5

Đây là một chút khéo léo.

Thông thường bạn sẽ làm gì đây nếu đó là một khoảng thời gian tĩnh, hoặc là một loại thời gian duy nhất, là một cái gì đó dọc theo dòng:

$date = "2013-01-05 10:55:15"; 
$time = new DateTime($date); 
$time->add(new DateInterval('PT5M')); 

này sẽ thêm 5 phút để datetime. Tuy nhiên tôi nghi ngờ bạn có thể vượt qua toàn bộ khoảng thời gian. Vì vậy, những gì bạn có thể phải làm là chia khoảng thời gian bằng cách: và sau đó thêm từng phần của khoảng thời gian (tôi giả sử nó là động?) Vào ngày riêng biệt. giờ nên đầu tiên, sau đó phút, sau đó giây

Để biết thêm về vấn đề này, xem tại đây: http://www.php.net/manual/en/datetime.add.php

3

Trước tiên, bạn có thể phát nổ khoảng và sau đó nhận được những giờ, phút, giây, và sau đó sử dụng DateTime của add() để thêm khoảng thời gian, như vậy:

$interval = '50:25:10'; 
$datestring = '2013-01-05 10:55:15';  
list($hours, $minutes, $seconds) = explode(':', $interval); 

$date = new DateTime($datestring);  
$date->add(new DateInterval('PT'.$hours.'H'.$minutes.'M'.$seconds.'S')); 
echo $date->format('Y-m-d H:i:s'); 

Demo!

1

Trong trường hợp bất cứ ai cần dựa trên câu trả lời ở trên, tôi đã thực hiện chức năng của tôi như thế này:

public function addTime($date, $time) { 
    $atime = explode(":", $time); 
    $_date = date_create_from_format("Y-m-d H:i:s", $date); 
    $_date->add(new DateInterval("PT" . intval($atime[0])."H".intval($atime[1])."M".intval($atime[2])."S")); 
    return $_date->format("Y-m-d H:i:s"); 
} 

hy vọng nó sẽ giúp ai đó